2012-12-03 55 views
0

我正在写一个脚本来防止表单点击,但我不能让它在IE7-8中工作,任何人都知道为什么它是?IE事件不捕捉元素

我尝试使用ev = e || window.event;但没有什么好事发生。 请帮助,并在日后感谢。

(function(button) { 
    $(document).click(function(e) { 
     ev = e || event; 
     var clickedEl = ev.srcElement || ev.target; 
     var parentClass = $(button).attr('class').split(' ')[0]; 

     if (clickedEl !== button && $(clickedEl).parents('.' + parentClass). 
length == 0 && !$(clickedEl).hasClass(parentClass)) { 

      // DO SOMETHING 
     } 
    }); 
})($('.category_select')[0]); 
+0

你可能会想点ONT在什么都把它不工作。你收到什么错误信息?您也可以确保在每次操作中记录您的值,以确定它们是您所期望的。 “ev”的价值是你期望的吗? (如果不是,我们不必关心后面的任何内容)“clickedEl”的值是你期望的吗? (如果是这样,我们不必关心'ev'的价值,如果不是,我们不必关心任何后续的事情)。是$(button).attr('class')的值;'你期望什么? –

+0

是ev = e ||事件;与ev = e ||相同** **窗口事件; ? – cohadar

+0

大卫:是的,我试图调试,clickedEl是undefined我认为问题是ev变量不正确,我找不到原因。将来我需要清楚的解释。 @cohadar我认为这个事件== window.event,因为它是全局窗口事件并且执行相同操作:?但尝试不坏。 – GomatoX

回答

2

因为您使用的是jQuery,所以无论浏览器如何,事件对象都会传递给回调函数。尽管需要注意的是,您将不会收到事件对象的“纯”:它被包装在一个jQuery对象中。要获得真正的事件对象,这样做:

var trueEvent = e.originalEvent; 

这应该做的伎俩,提醒你:你会不会在IE8 jQuery的stopPropagation方法,你必须手动更正为使用.returnValue = false.cancelBubble = true

(function(button) 
{ 
    $(document).click(function(e) 
    { 
      var ev = e.originalEvent,//this is all you need to do, plus ev is a variable, declare it as such, 
      clickedEl = ev.srcElement || ev.target,//separate var declarations by comma 
      parentClass = $(button).attr('class').split(' ')[0]; 
      if (clickedEl !== button && $(clickedEl).parents('.' + parentClass).length == 0 && !$(clickedEl).hasClass(parentClass)) 
      { 
       // DO SOMETHING 
      } 
    }); 
})($('.category_select')[0]); 

这应该工作
我也看了一下jQuery的参考this is what it says on the jQuery event object

+0

嗯,有趣,但我不清楚明白你的意思。所以你说,如果我试图达到'$()。bind('',function(e){});' 所以要得到true事件,我需要将其设置为:'var trueEvent = e [0]' ,它会跨越所有浏览器? – GomatoX

+0

jQuery实际上为你创建了一个事件处理程序,它执行所有X浏览器的东西('e = e || window.event'和你有什么),然后做一些事情('yourCallback.apply(this,[$ (e)])< - 将事件作为jQuery对象传递),从jQuery对象获取实际对象,只需获取索引为0的元素(尝试'$('*')[0]',将返回DOM的第一个节点:jQuery对象不过是一个包装对象,有很多方法 –

+0

好吧,我明白了,但这件事并没有解决我的问题,我更新了我的问题,我将包括一个例子。你可以看到我想要达到的效果 – GomatoX