пытается написать кросс-браузерное событие, отключающее функцию js.что случилось? - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь написать свою собственную функцию для блокировки событий.

вот что у меня есть

function disableEvent (element, event, useCapture) {
function preventer (event) {
    event = event || window.event;
    event.preventDefault() ? event.preventDefault() : (event.returnValue = false);        
    event.stopPropagation() ? event.stopPropagation() : (event.cancelBubble = true);        
}    
if (typeof useCapture == 'undefined') useCapture = false;
    if (element.addEventListener)
        element.addEventListener(event.toLowerCase().substr(2), preventer, useCapture)
    else if (element.attachEvent) {
        var result = element.attachEvent(event,preventer);
        return result;
    }
    else {
        alert("Try to change or update your browser")
    }                        

}

Но это не работает в браузере IEЭто показывает мне ошибку в 4-й строке.Ценю вашу помощь с этой задачей.С наилучшими пожеланиями, Ахмед.

1 Ответ

2 голосов
/ 19 января 2012

При попытке проверить, существует ли функция, вы пишете:

event.stopPropagation() ? event.stopPropagation() : (event.cancelBubble = true);

Давайте проанализируем это. event.stopPropagation() - это вызов event.stopPropagation без параметров, он ничего не возвращает, что означает undefined. Таким образом, вы столкнетесь с одной проблемой: если stopPropagation не существует, вы все равно звоните. Выдает ошибку, вот что происходит в вашем случае.

Чтобы избежать этой проблемы, вы должны проверить, существует функция или нет:

event.stopPropagation ? event.stopPropagation() : (even.cancelBubble = true);

Должно работать правильно. То же самое с preventDefault.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...