Javascript IE事件don';t捕捉元件

Javascript IE事件don';t捕捉元件,javascript,jquery,dom,Javascript,Jquery,Dom,我正在写一个防止表单点击的脚本,但是我不能让它在IE7-8中工作,也许有人知道为什么吗 我尝试使用ev=e | | window.event;但没有什么好事发生。 请帮忙,以后谢谢你 (function( button ) { $( document ).click(function( e ) { ev = e || event; var clickedEl = ev.srcElement || ev.target; var parentC

我正在写一个防止表单点击的脚本,但是我不能让它在IE7-8中工作,也许有人知道为什么吗

我尝试使用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]);

因为您使用的是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参考

您可能想指出它在哪些方面不起作用。您收到了什么错误消息?您还可以确保在每个操作中记录您的值,以查看它们是否符合您的期望。
ev
的值是否符合您的预期?(如果不是,我们就不必关心后面发生的任何事情)点击del的值是你期望的吗?(如果是,我们不必关心
ev
,如果不是,我们不必关心后面的任何东西)。是
$(button).attr('class')的值你期望什么?是ev=e | |事件;与ev=e | | window.event;相同?大卫:是的,我试过调试,clickedEl没有定义,我想问题是ev变量不正确,我找不到原因。我以后需要清楚的解释@cohadar我认为event==window.event,因为它是全局窗口事件,并且执行相同的操作:?嗯,很有趣,但我不太明白你的意思。所以你说如果我试图达到
$().bind(“”,函数(e){})所以要获得真实事件,我需要将它设置为:
var trueEvent=e[0]
,它可以跨所有浏览器工作?jQuery实际上为您创建了一个事件处理程序,它可以处理所有X浏览器的事情(
e=e | | window.event
以及您所拥有的东西),然后执行类似于(
yourCallback.apply(这,[$(e)])的操作
好的,我理解,但这件事并没有解决我的问题,我更新了我的问题,我将包括一个例子。这样你就可以看到我试图实现的目标。@GomatoX:我复制粘贴了你的代码,只添加了
var ev=e[0]
让它按预期工作。如果你仍然卡住了,请摆好小提琴,我会看一看。我准备了一把小提琴,发现一切正常,所以我想是别的东西……谢谢,伙计;)