我有一个带有ng-change处理程序的表单元素。我想以编程方式触发处理程序,但不直接检查范围。我想这样做是因为我正在编写Chrome扩展程序,因此我无法轻松访问“范围”'获得处理程序。
我尝试了
的明显选择$(element).triggerHandler('change')
但这似乎不起作用。请参阅此处的示例:https://plnkr.co/edit/iaz7trxVT09XWBktGhE9?p=preview(在此示例中,我在更改处理程序运行时将某些行记录到控制台,但单击按钮不会记录这些行)。
我尝试了在这里的各种线程中找到的一些其他方法,例如trigger()或使用dispatchEvent手动构造事件和fire但无济于事。我不太明白为什么事件处理程序不会触发。有人可以帮忙吗?
答案 0 :(得分:1)
嗯,显然(根据docs),当值没有改变时,不会触发模型更改。一个丑陋(但有效)的解决方法是实际更改值:
var v = $('#testField1').val();
$('#testField1').val(0)
$('#testField1').triggerHandler('change');
$('#testField1').val(v)
$('#testField1').triggerHandler('change');
当然这会触发事件两次,如果这是一个问题,你可以使用一个已知的"魔术值" (例如,最小负整数)并忽略它。
或者,我担心没有简单的解决方案:您可能需要访问示波器/控制器以直接调用您想要的功能,或者干涉角度事件处理。