我使用的原型事件侦听器用于选择选定菜单的更改,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. 。您可以将支票添加到回调中,以确保该值实际上与以前不同,以确保您不会处理事件的时间超过必要的时间(因为其他浏览器会发射两者 clickchange 同时,如果他们单击新值)。

我知道这是一个古老的话题,但我想分享上述一个的替代答案。在我的代码中,该元素的名称和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;
}

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top