在html页面中,如果我使用鼠标从下拉列表中选择一个项目(select和option html元素),则会触发onchange事件。 但是如果我使用javascript来更改select元素的selectedindex,那么onchange事件将不会被触发。
这两种行为有何不同?
如何触发onchange事件(不是通过显式调用selectElement.onchange())?
答案 0 :(得分:1)
请参阅:http://jsfiddle.net/9xe9b/
$("#currency").change(function(){
var val = $(this).val();
$(this).val(formatCurrency(val));
});
$("#infinite").change(function(){
var val = $(this).val();
$(this).val(formatCurrency(val));
$(this).change(); // simulate the change event.
});
function formatCurrency(num) {
num = isNaN(num) || num === '' || num === null ? 0.00 : num;
return parseFloat(num).toFixed(2);
}
如果您在第二个文本框中输入值并弹出控制台,则会看到以下错误:
Uncaught RangeError: Maximum call stack size exceeded
如果更改javascript中的值导致相关事件触发,我们将不得不担心这一点。无限循环!
因此,如果您需要在通过UI或通过javascript更改值时重复功能,则应创建一个能够执行所需操作并在适当实例中调用它的函数。