jQuery ajax 不刷新页面动态获取select的option

时间:2021-09-29 00:53:44
页面上有一个select,我希望实现每当我点击这个select就用ajax从后台读取数据库的值作为option,显示成下拉列表,option的数量和值都不固定,需要每次选择时都从数据库读而不刷新整个页面,只想刷新select的下拉列表。
用了click事件,点击后虽然能读出数据库的数据,但是在ie下就直接把下拉框收上去了,无法选择,而在chrome下可以选择,但是点击某个option的时候貌似又触发了一次click事件,导致所选的option被刷新成默认的了。求高手给个解决方案
希望依然能用jQuery、ajax实现

jQuery的ajax代码是这样写的:

$("#condition1").change(function(event){
$.ajax({
url:getRootPath()+"/df/data_append/select_condition1.do",
data:{condition:condition_name},
type:"POST",
dataType:"json",
timeout:5000,
success:function(json){
var select_option;
$.each(json.selected_option_value,function(i, item){
select_option = item;
});
var options_str = "";
$("#condition1").html("");
$.each(json.options,function(i, item){
options_str += "<option value=\"" + item.value + "\" >" + item.label + "</option>";
        });
$("#condition1").append(options_str);
},
error:function(xhr, status){
alert("error");
}
})});


其中#condition1就是select的id

9 个解决方案

#1


不明白你的意思,change事件一概是下拉框选定的内容变更了才执行,开始选的是a,后面选择的是b,这时候执行change事件

#2


我也看不明白你想干什么,想干级联菜单么,级联菜单的话直接用change时间就行了,每次都不同这个还会第一次听说

#3


不要用select 用eaayui里有的组件,好像叫combox,看看API其用法

#4


建议页面加载时,用getJSON方法取出数据 append到select里

#5


该回复于2013-05-19 09:35:38被管理员删除

#6


有一个很坑的方法,url一样就不重新加载

#7


使用$().load,而不是$.ajax

#8


$(select).blur();
// Force the dropdown to open:
// http://*.com/questions/10453393/how-to-open-the-select-input-using-jquery
var e = document.createEvent("MouseEvents");
e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
select.dispatchEvent(e);

当时google浏览器时,使用这个就可以了

#9


刚好也遇到这个问题了
原因是在选择第一次ajax获取的下拉选项时,又会触发下一次ajax请求
用一个很简单的手段解决了:
另外建立一个隐藏的文本框,初始值为0 ,第一次ajax请求成功后改变这个文本框的值为1
然后修改具体的ajax方法,只有前面建立的文本框值为0时继续执行,否则直接跳出

#1


不明白你的意思,change事件一概是下拉框选定的内容变更了才执行,开始选的是a,后面选择的是b,这时候执行change事件

#2


我也看不明白你想干什么,想干级联菜单么,级联菜单的话直接用change时间就行了,每次都不同这个还会第一次听说

#3


不要用select 用eaayui里有的组件,好像叫combox,看看API其用法

#4


建议页面加载时,用getJSON方法取出数据 append到select里

#5


该回复于2013-05-19 09:35:38被管理员删除

#6


有一个很坑的方法,url一样就不重新加载

#7


使用$().load,而不是$.ajax

#8


$(select).blur();
// Force the dropdown to open:
// http://*.com/questions/10453393/how-to-open-the-select-input-using-jquery
var e = document.createEvent("MouseEvents");
e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
select.dispatchEvent(e);

当时google浏览器时,使用这个就可以了

#9


刚好也遇到这个问题了
原因是在选择第一次ajax获取的下拉选项时,又会触发下一次ajax请求
用一个很简单的手段解决了:
另外建立一个隐藏的文本框,初始值为0 ,第一次ajax请求成功后改变这个文本框的值为1
然后修改具体的ajax方法,只有前面建立的文本框值为0时继续执行,否则直接跳出