我有外部文件生成复选框列表。这个文件是通过jquery加载加载的。我希望单击复选框并使用某些内容更新其父div。
HTML
<div id="testiContent"></div>
checkbox.php
<div class="alert alert-info"><input type='checkbox' class='groupid' value='1'>1</div>
<div class="alert alert-info"><input type='checkbox' class='groupid' value='2'>2</div>
<div class="alert alert-info"><input type='checkbox' class='groupid' value='3'>3</div>
jquery的
$('#testiContent').load('checkbox.php');//load file via ajax
$("#testiContent input.groupid").change(function(){
if($(this).is(":checked")){
$(this).parents().addClass("alert alert-success");
}else{
$(this).parent().removeClass("alert alert-success");
}
});
理想情况下,当复选框单击时,警报div将变为绿色。我可以使用正常的脚本,但不能使用ajax。
答案 0 :(得分:2)
我的预感是,您只是在内容加载到DOM之前附加change
侦听器,因此它实际上并不针对任何内容。您可以传递一个回调函数来加载仅在内容在DOM中之后附加change
侦听器的尝试,但可能更容易使用on
方法文件 - 这是常青树,不需要依赖回调:
$('#testiContent').load('checkbox.php');//load file via ajax
$(document).on('change', 'input.groupid', function(e){
var target = e.target;
if($(target).is(":checked")){
$(target).parents().addClass("alert alert-success");
}else{
$(target).parent().removeClass("alert alert-success");
}
});
这可能不完全正确,但我认为它至少会触发。
答案 1 :(得分:2)
您无法绑定到尚未存在的元素,因此动态添加的元素不受$"#testiContent input.groupid"
选择器的约束。解决这个问题的方法是绑定 已经存在的东西。例如,动态添加元素的父容器。
尝试这样的事情:
$("#testiContent").on('change', 'input', function(){ ... });
会将一个监听器附加到父级,特别是对于该父级中相应(input
)目标上的事件。
答案 2 :(得分:1)
当动态加载html控件时,需要手动绑定这些控件的事件。因此,一旦元素添加完成,您需要绑定检查/单击事件。您可以将代码编写为
$(document).on("change","input.groupid").change(function(){
// your code here
});
答案 3 :(得分:0)
使用此
$("input.groupid").change(function() {
if ($(this).is(":checked")) {
alert($("input.groupid").val());
$(this).closest('div').removeClass("alert-info");
$(this).closest('div').addClass("alert-success");
} else {
$(this).closest('div').removeClass("alert-success");
$(this).closest('div').addClass("alert-info");
}
});
答案 4 :(得分:0)
您需要在文档上使用change事件,因为内容是通过ajax加载的。并且您可以使用toggleclass函数来更改父div。
$('#testiContent').load('checkbox.php');//load file via ajax
$(document).on('change', '.groupid', function(e) {
$(this).closest("div").toggleClass("alert-success alert-info");
});