Javascript 关于触发器事件侦听器

Javascript 关于触发器事件侦听器,javascript,jquery,eventtrigger,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 如果不使用.chan

最好的做法是在定义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无法调用我的事件处理程序

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

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

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

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


实际上,您必须执行您在第三个示例中所做的操作。我知道没有其他方法可以实现这一点。

你可以使用
.trigger('change')
@xmarston调用
.change()
(无参数)调用
.trigger('change')
,所以它们是一样的。试试这个$(文档)。ready(function(){$(“#mySelect”)。on('change',function(){$(“#myTextField”).val($(“#mySelect选项:选定”).text();}).change();})/$(“#mySelect”).change()@Realdheeraj,它没有事件委派。