IE事件不捕获元素

时间:2012-12-03 12:00:27

标签: javascript jquery dom

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

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

1 个答案:

答案 0 :(得分:2)

因为您正在使用jQuery,所以无论浏览器如何,都会将事件对象传递给回调。虽然重要的是要注意你不会收到“pure”事件对象:它包含在jQuery对象中。要获取 true 事件对象,请执行以下操作:

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