event.Observe“更改”事件未在IE中触发
-
23-09-2019 - |
题
我使用的原型事件侦听器用于选择选定菜单的更改,IE并未触发。
Event.observe('use_billing', 'change', Checkout.getBillingData);
这在Firefox(当然)中正常工作,但是IE(当然)没有任何事情发生 - 我已经谷歌搜索了一段时间,但是我还没有找到适合这个问题的解决方案。我读到有问题,但是我发现没有任何有用的方法可以解决问题并使其起作用。
我真的在努力避免使用内联事件触发器,因为它们令人难以置信,并且使一个容易出错的文档很容易出现:
<select id='use_billing' onchange="Checkout.getBillingData();">....</select>
任何想法都会很棒 - 这是阻止该项目从Beta到生产的唯一事情。
解决方案 2
我找到了原因 - 这不是焦点问题,事实证明我具有相同的表单元素的名称和ID值 - 我更改了ID值,一切正常。
其他提示
这是IE的常见问题。它不开火 change
事件直到元素失去焦点为止。
要验证这确实是您问题的原因,请尝试更改菜单,然后按下选项卡以将焦点移至另一个元素。如果您的回调正确发射,您会知道没有其他问题。
我以前还通过听其他事件来解决这个问题 click
或者 keydown
. 。您可以将支票添加到回调中,以确保该值实际上与以前不同,以确保您不会处理事件的时间超过必要的时间(因为其他浏览器会发射两者 click
和 change
同时,如果他们单击新值)。
我知道这是一个古老的话题,但我想分享上述一个的替代答案。在我的代码中,该元素的名称和ID是相同的,但没关系。
在发射的函数中,事件参数正在从原型传递。要在Firefox中获取文本框的价值(提高了事件) eventArg.currentTarget.value
但是在IE中,您必须使用 eventArg.srcElement.value
因此,为了使其在两个浏览器中工作,您必须使用...
var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}