最佳做法是在其定义后立即调用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();
问题:没有重新选择元素并触发事件,有什么好办法解决这个问题吗?
答案 0 :(得分:0)
您需要找到所有元素并在其上调用触发器...因为委托将处理委托给DOM上的其他元素(您可能知道)
你基本上必须做你在第3个例子中所做的事情。我知道没有其他方法可以实现这一目标。