jQuery .on触发事件监听器

时间:2014-02-10 09:07:41

标签: javascript jquery eventtrigger

最佳做法是在其定义后立即调用jQuery更改处理程序以重新使用代码并初始化GUI,例如

$("#mySelect").change(function() {
  $("#myTextField").val( $(this).text());
}).change(); // here the element is immediately triggered, so one does not need a separate code path for the init-case

如果没有使用.change()立即调用,GUI将无法反映#myTextfield中#mySelect的初始值。

对于更新版本的jQuery,我想使用事件委派,并使用.on() API执行相同的操作。

$("#myForm").on('change', '#mySelect', function() {
  $("#myTextField").val( $(this).text());
}).change();

这不再起作用了,因为.change()没有在正确的元素上触发而没有在正确的event.target上触发,所以jQuery无法调用我的事件处理程序。

这样可行,但如果没有单独的init代码路径,则不再反映最佳实践:

$("#myForm").on('change', '#mySelect', function() {
  $("#myTextField").val( $(this).text());
});
$("#mySelect").change();

问题:没有重新选择元素并触发事件,有什么好办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您需要找到所有元素并在其上调用触发器...因为委托将处理委托给DOM上的其他元素(您可能知道)

你基本上必须做你在第3个例子中所做的事情。我知道没有其他方法可以实现这一目标。