更新:( 回顾,小提琴和赏金)
这个问题并没有得到太多的关注,所以我要花一些代表.我知道我的答案和问题往往过于冗长.这就是为什么我继续设置这个小提琴,在我看来,这是我目前不得不用来接近冒泡change事件的代码.我正试图解决的几个问题:
pseudo-change事件不会触发一个select元素,除非它失去焦点.在某些情况下,应在选择新值时重定向客户端.我该如何实现这一目标?realTarget属性.checked通过单击标签在IE中更改复选框的-state时,一切都很好(虽然它需要一些讨厌的解决方法),但是当直接单击复选框时,会调用处理程序,但是检查状态保持不变,直到我单击一个第二次.然后值会更改,但不会调用处理程序.任何可以帮助我解决上述一个或多个问题的信息将不胜感激.拜托,我没有忘记添加一个jQuery标签,我喜欢纯JS,所以我正在寻找一个纯粹的JS答案.
我有一个网页上有超过250个选择元素,以及20~30个复选框.我还必须跟踪用户的操作,并采取适当的措施.因此,我很自然地委派变更事件,而不是添加数百个听众,恕我直言.
当然,IE -company策略:IE8必须得到支持 - 在我需要时不会触发onchange事件.所以我想假装一个onchange事件.到目前为止,我所做的工作相当不错,除了一件真正让我烦恼的事情.
我正在使用onfocusin并onfocusout注册活动.在某些情况下,当用户从select元素中选择一个新值时,脚本应立即响应.但是,只要选择没有失去焦点,就不会发生这种情况.
这是我到目前为止所提出的:
i = document.getElementById('content');
if (!i.addEventListener)
{
i.attachEvent('onfocusin',(function(self)
{
return function(e)
{
e = e || window.event;
var target = e.target || e.srcElement;
switch (target.tagName.toLowerCase())
{
case 'input':
if (target.getAttribute('type') !== 'checkbox')
{
return true;
}
return changeDelegator.apply(self,[e]);//(as is
case 'select':
self.attachEvent('onfocusout',(function(self,current)
{
return function(e)
{
e = e || window.event; …Run Code Online (Sandbox Code Playgroud) javascript internet-explorer javascript-events event-delegation