1

我有一个 jQuery 的 noConflict 实例,它会自动包含在我的某些页面中。此代码将自动更新它找到的任何匹配的表单字段。例如:

var jq = $.noConflict(true);

if (jq('input[name="field_name"]').length > 0) 
{
    jq('input[name="field_name"]').val('field_value');
}

我希望此代码随后触发该表单对象上的标准内置“更改”事件,以便触发附加到它的任何侦听器/事件处理程序。这可能吗?

我知道您可以在 jquery 中触发更改事件,但这些事件只会被同一实例中的事件处理程序拾取。例如:

jq('input[name="field_name"]').trigger('change');

我希望能够为任何可能正在监听它的东西触发更改事件,无论是另一个 jQuery 实例,还是标准 javascript。

任何人都可以帮忙还是我走得太远了?

谢谢

4

1 回答 1

2

您可以手动触发事件。jQuery 实际上也触发了本机事件,但是正如提琴手示例所示,jquery 似乎不会触发向 addEventListener 注册的其他处理程序。(有关本机事件的信息,请参阅https://stackoverflow.com/a/3631714/174469 )

这是一个显示示例的提琴手:http: //jsfiddle.net/EXw4P/2/

HTML:

<input type="text" id="foobar" />

Javascript:

// Register a non-jquery handler on the textbox
foobar.onchange = function () {
    alert("explicit native onchange");   
}
foobar.addEventListener('change', function() { alert('event listener onchange') }, false);

$("#foobar").change(function () {
    alert("jquery onchange"); 
});

alert("Trigger change from jquery")
$("#foobar").trigger("change");

alert("Trigger native change event")
var fakedEvent = document.createEvent('MouseEvents');
fakedEvent.initMouseEvent('change', true, true, window,
    0, 0, 0, 0, 0, false, false, false, false, 0, null);
foobar.dispatchEvent(fakedEvent);
于 2013-08-09T14:57:32.900 回答