2个列表菜单自动提交以及默认选定问题
上一篇 / 下一篇 2008-03-05 16:35:30 / 个人分类:js与jquery学习笔记与总结
效果是这样的,首先是选择游戏项目自动出现相对应的游戏世界,选择游戏项目和游戏世界后就自动提交,然后将自己选中的的作为默认值,例如选择travian游戏,无刷新显示相对的游戏服务器比如sn1,cn1,sn7(从数据库里查找的),我选择travian,sn1之后列表菜单自动提交,然后自动将travian,sn1分别作为游戏项目和游戏世界的默认值。
需要用到ajax+jquery+js
tpl文件代码:
{#$delcache#}
<scrīpt language="Javascrīpt" type="text/javascrīpt">
<!--
/*
*author:heaven
*desc :ajax+js+mysql+php+json+smarty无刷新游戏和游戏世界联动菜单
* 说明:将指定下拉列表的选项值清空
*
* @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须
*/
//动态加载setCity函数,显示游戏服务器
function addLoadEvent(func) {
var ōldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
window.onload = function() {
addLoadEvent(setCity(document.getElementById("province").value));
}
function removeOptions(selectObj)
{
// alert(1234);
if (typeof selectObj != 'object')
{
selectObj = document.getElementById(selectObj);
}
// 原有选项计数
var len = selectObj.options.length;
for (var i=0; i < len; i++)
{
// 移除当前选项
selectObj.options[0] = null;
}
}
/*
* 说明:设置传入的选项值到指定的下拉列表中
*
* @param {String || Object]} selectObj 目标下拉选框的名称或对象,必须
* @param {Array} optionList 选项值设置 格式:[{txt:'北京', val:'010'}, {txt:'上海', val:'020'}] ,必须
* @param {String} firstOption 第一个选项值,如:“请选择”,可选,值为空
* @param {String} selected 默认选中值,可选
*/
function setSelectOption(selectObj, optionList, firstOption, selected)
{
//alert(selectObj);
// alert(optionList);
// alert(firstOption);
var temp=document.getElementById(selectObj);
// alert(temp);
if (typeof selectObj != 'object')
{
selectObj = temp;
}
// alert(selectObj);
// 清空选项
removeOptions(selectObj);
// 选项计数
var start = 0;
// 如果需要添加第一个选项
if (firstOption)
{
selectObj.options[0] = new Option(firstOption,'');
// 选项计数从 1 开始
start ++;
}
var len = optionList.length;
for (var i=0; i < len; i++)
{
// 设置 option
selectObj.options[start] = new Option(optionList[i].txt, optionList[i].val);
if (selectObj.options[start].value=='{# $smarty.get.city #}')
{
selectObj.options[start].selected="selected";
}
start++;
}
}
//-->
</scrīpt>
<scrīpt language="Javascrīpt" type="text/javascrīpt">
var xmlhttp;
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e1)
{
try
{
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e2)
{
try
{
xmlhttp = new XMLHttpRequest();
}
catch(e3)
{
alert("您的浏览器不支持Ajax的运行!");
}
}
}
var action;
var cityArr =[];
var province;
function setCity(province)
{
var url="handler/ajax.php?game_id="+province+"&action=getserver";
xmlhttp.open("GET",url,true);
//xmlhttp.onreadystatechange=update(province);
xmlhttp.onreadystatechange =function(){
//var cityArr =[];
//alert(xmlhttp.readyState);
if (xmlhttp.readyState == 4 && xmlhttp.status==200)
{ var cityArr = [];
cityArr[province]=xmlhttp.responseText;
arr=eval(cityArr[province]);
setSelectOption('city',arr,'-请选择游戏世界-');
}
}
xmlhttp.send(null);
}
</scrīpt>
<input type="hidden" name="module" value="{# $modulevalue #}" />
<select name="province" id="province" ōnchange="if(this.value != '') setCity(this.options[this.selectedIndex].value);">
<option value="">-请选择游戏项目-</option>
{# section name="game_select" loop=$game_loop #}
{# if $game_loop[game_select].g_id eq $checkgid or $game_loop[game_select].g_id eq $smarty.get.province #}
<option value="{#$game_loop[game_select].g_id#}" selected="selected">{#$game_loop[game_select].g_game#}</option>
{# else #}
<option value="{#$game_loop[game_select].g_id#}">{#$game_loop[game_select].g_game#}</option>
{# /if #}
{# /section #}
</select>
{# if $servervalue!="" && $checkgid!="" #}
<select name="city" id="city" ōnchange="game_lists(this.value)">
{# section name="deafaultser" loop=$deafaultrow #}
{# if $deafaultrow[deafaultser].server_id eq $servervalue or $deafaultrow[deafaultser].server_id eq $smarty.get.city #}
<option value="{# $deafaultrow[deafaultser].server_id #}" selected="selected">{# $deafaultrow[deafaultser].server_name #}</option>
{# else #}
<option value="{# $deafaultrow[deafaultser].server_id #}">{# $deafaultrow[deafaultser].server_name #}</option>
{# /if #}
{# /section #}
</select>
{# else #}
<select name="city" id="city">
<option value="">请选择游戏世界</option>
</select>
{# /if #}
<scrīpt>
(function($) {
game_lists = function(serid)
{
var gameid=document.getElementById("province").value;
location.href = "?module={# $modulevalue #}&province=" +gameid+"&city="+serid;
}
})(jQuery);
</scrīpt>
自动提交部分靠jquery实现:
在游戏世界加上<select name="city" id="city" ōnchange="game_lists(this.value)">
<scrīpt>
(function($) {
game_lists = function(serid)
{
var gameid=document.getElementById("province").value;
location.href = "?module={# $modulevalue #}&province=" +gameid+"&city="+serid;
}
})(jQuery);
</scrīpt>
附上默认值:
游戏菜单
{# if $game_loop[game_select].g_id eq $checkgid or $game_loop[game_select].g_id eq $smarty.get.province #}
游戏世界菜单麻烦点:
var len = optionList.length;
for (var i=0; i < len; i++)
{
// 设置 option
selectObj.options[start] = new Option(optionList[i].txt, optionList[i].val);
if (selectObj.options[start].value=='{# $smarty.get.city #}')
{
selectObj.options[start].selected="selected";
}
start++;
}

