我的页面有三个html select标签。
我希望这三个选择标签具有以下功能:
当我更改selectA时,selectB会根据selectA自动更改。
创建selectB的选项后,当我根据selectB更改selectB而不是selectC自动更改时。
(
例如...
首先selectA的选项有歌手,电影明星,selectB只是空的。
选中歌手选项时,selectB自动创建选项“Lady Gaga”,“Celine Dion”,“Whitney Houston”,如果创建了三位歌手,则当我选中“Lady Gaga”时,selectC将创建“生日”,“Facebook”, “google +”选项。
当电影明星选项选中,selectB自动创建选项“布鲁斯·威利斯”,“马特·达蒙”,“威尔·史密斯”,如果有三个电影明星创造了,当我检查“布鲁斯·威利斯”,该selectC将创建“生日”,“脸谱“,” google +“选项。
)
我的问题是...当我更改selectB时,$(“#selectB_id”)。change()不起作用
以下是我的JavaScript代码:
$(function(){
$("#lineselect").change( function() {
$.ajax({
url: '/lineflow/ajaxgetselect',
type:'POST',
data:{ service_id:$("#lineselect option:checked").val() , level:1 },
success: function( res ){
var obj = jQuery.parseJSON(res);
if( $("#lineselect").val() == 0 )
{
$("#second_li").html("");
$("#third_li").html("");
}
else if( $("#lineselect").val() == 1 )
{
$("#second_li").html("");
$("#third_li").html("");
$("#second_li").html('<select id="service_type" name="service_type"><option value="0">ALL</option></select>');
$("#third_li").html('<select id="service_name" name="service_name"><option value="0">ALL</option></select>');
for( i=0; i<obj.length; i++)
{
$('#service_type').append($("<option></option>")
.attr("value",obj[i].id)
.text(obj[i].name));
}
}
else if( $("#lineselect").val() == 2 )
{
$("#second_li").html("");
$("#third_li").html("");
$("#second_li").html('<input type="text" id="url_name" name="url_name"></input>');
}
else if( $("#lineselect").val() == 3 )
{
$("#second_li").html("");
$("#third_li").html("");
$("#second_li").html('<select id="url_type" name="url_type"><option value="0">ALL</option></select>');
for( i=0; i<obj.length; i++)
{
$('#url_type').append($("<option></option>")
.attr("value",obj[i].id)
.text(obj[i].name));
}
}
},
error: function(obj, status, err){}
});
});
$("#service_type").change( function() { // this change not work!!!
$.ajax({
url: '/lineflow/ajaxgetselect',
type:'POST',
data:{ service_id:$("#service_type option:checked").val() , level:2 },
success: function( res ){
var obj = jQuery.parseJSON(res);
$("#third_li").html("");
$("#third_li").html('<select id="service_name" name="service_name"><option value="0">ALL</option></select>');
for( i=0; i<obj.length; i++)
{
$('#service_type').append($("<option></option>")
.attr("value",obj[i].id)
.text(obj[i].name));
}
},
error: function(obj, status, err){}
});
});
});
最佳答案
在这行上:
$("#second_li").html('<select id="service_type" name="service_type"><option value="0">ALL</option></select>');
如您所见,您将附加到事件处理程序后,将
#service_type
元素添加到DOM中。因此,必须使用事件委托(delegate)。这可以通过jQuery中的
.on()
方法完成:$('#second_li').on('change', '#service_type', function () {
$.ajax({
//
});
});
#second_li
元素在页面上必须为静态。否则,请使用另一个选择器。 引用文献:
.on()
-jQuery API文档