传递自定义数据在焦点事件和更改事件之间是不同的 jQuery
Passing custom data is different between focus and change event jQuery
我在 https://jsfiddle.net/ws1hz5uf/ 有一个 fiddle,演示了如何将额外数据传递给目标事件。
第一个按钮 (Go 1) 在文本输入上触发 焦点
<div class="enclosing1">
<input type="text" id="example">
<label for="example">Test label 1</label>
<input type="button" id="test1" value="Go 1">
</div>
$(".enclosing1").on("click","#test1", function() {
$("#example").trigger("focus", [true]);
});
$(".enclosing1").on("focus", "#example", function(event, isAutoTrigger) {
console.log(isAutoTrigger);
});
第二个按钮 (Go 2) 触发下拉列表中的 change。
<div class="enclosing2">
<select id="test-select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<label for="test-select">Test label 2</label>
<input type="button" id="test2" value="Go 2">
</div>
$(".enclosing2").on("click", "#test2", function() {
$("#test-select").trigger("change",[true]);
});
$(".enclosing2").on("change", "#test-select", function(event, isAutoTrigger) {
console.log(isAutoTrigger);
});
查看控制台我可以清楚地看到 focus' 事件处理程序无法从触发器调用中接收额外的参数,而 change 可以。考虑到jQueryAPI的trigger和on方法描述的一致性,我不明白为什么会有在事件处理程序如何处理额外数据方面存在这种差异。谁能帮我解释一下?
我找到了原因:focus 是 jQuery 的 特殊事件 ,它的事件处理程序不接受额外参数.因此将事件从 focus 更改为 focusin 解决问题。
我在 https://jsfiddle.net/ws1hz5uf/ 有一个 fiddle,演示了如何将额外数据传递给目标事件。
第一个按钮 (Go 1) 在文本输入上触发 焦点
<div class="enclosing1">
<input type="text" id="example">
<label for="example">Test label 1</label>
<input type="button" id="test1" value="Go 1">
</div>
$(".enclosing1").on("click","#test1", function() {
$("#example").trigger("focus", [true]);
});
$(".enclosing1").on("focus", "#example", function(event, isAutoTrigger) {
console.log(isAutoTrigger);
});
第二个按钮 (Go 2) 触发下拉列表中的 change。
<div class="enclosing2">
<select id="test-select">
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<label for="test-select">Test label 2</label>
<input type="button" id="test2" value="Go 2">
</div>
$(".enclosing2").on("click", "#test2", function() {
$("#test-select").trigger("change",[true]);
});
$(".enclosing2").on("change", "#test-select", function(event, isAutoTrigger) {
console.log(isAutoTrigger);
});
查看控制台我可以清楚地看到 focus' 事件处理程序无法从触发器调用中接收额外的参数,而 change 可以。考虑到jQueryAPI的trigger和on方法描述的一致性,我不明白为什么会有在事件处理程序如何处理额外数据方面存在这种差异。谁能帮我解释一下?
我找到了原因:focus 是 jQuery 的 特殊事件 ,它的事件处理程序不接受额外参数.因此将事件从 focus 更改为 focusin 解决问题。