我有一个包含一组复选框的表单,可以进行多项选择。 (下面的代码段)。
由于生成内容所花费的时间,表单的内部HTML由AJAX添加,因此用户最初会看到一个空白表单,几秒钟后会看到其内容。
问题是复选框需要“onchange()”事件。对于容易的静态字段 - 我可能会给它们所有相同的类,然后使用jQuery $(".mychkboxes").on("change", my_event_handler);
对于动态添加的字段,我从其他问题中收集,我需要使用事件委托,我不太自信,所以我在AJAX处理程序的字段定义中添加了onchange="my_event_handler();"
,当然,填充表单时,处理程序功能已存在于浏览器的网页中。
但正在发生的事情是,如果我执行"onchange=\"alert('test'); my_event_handler();\" "
,警报会触发,因此我知道它正在运行,但my_event_handler()
永远不会被调用,尽管它存在且未以编程方式添加。
我无法弄清楚原因。或者,我如何在jQuery中以编程方式添加处理程序,因此我可以比较两种方法。
相关的javascript(由于其他原因使用events.push,如果相关):
<script type="text/javascript">
//<![CDATA[
events.push(function() {
function my_event_handler() {
alert("handler entered");
}
... ajax success handler relevant line...
$('#myform_div').html(data.form_html);
});
//]]>
</script>
data.form_html
包含此代码段(显然,如果通过委派以编程方式完成,则不需要此处的处理程序调用):
<div id="mydiv">
<input class="chk_mycheckboxlist" name="chk_mycheckboxlist[]" onchange="alert('event triggered'); my_event_handler();" id="chk_mycheckboxlist_item998" type="checkbox" value="998">
...
<input class="chk_mycheckboxlist" name="chk_mycheckboxlist[]" onchange="alert('event triggered'); my_event_handler();" id="chk_mycheckboxlist_item999" type="checkbox" value="999">
</div>