0

我正在编写一个防止表单点击的脚本,但我无法让它在 IE7 - 8 中工作,也许有人知道为什么会这样吗?

我尝试使用 ev = e || 窗口.事件;但没有什么好事发生。请帮助,并在未来感谢。

(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]);
4

1 回答 1

2

因为您使用的是 jQuery,所以无论浏览器如何,都会将事件对象传递给回调。尽管重要的是要注意您不会收到“纯”事件对象:它被包装在一个 jQuery 对象中。要获取真正的事件对象,请执行以下操作:

var trueEvent = e.originalEvent;

请注意,这应该可以解决问题:IE8 中没有 jQuerystopPropagation方法,您必须通过使用.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 参考这是它在 jQuery 事件对象上所说的

于 2012-12-03T12:11:58.973 回答