Как я могу заставить event.srcElement работать в Firefox и что это значит? - PullRequest
79 голосов
/ 14 марта 2011

на веб-сайте моей компании есть заявление if, которое делает одну веб-страницу несовместимой с firefox

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

Я прокомментировал условия оператора if и теперь он работает с forefox. Мой вопрос: что такое event.srcElement.getAttribute ("onclick"), важно ли это, может ли это вызвать проблемы в будущем. Кроме того, есть ли что-то подобное, с чем я могу заменить условие, чтобы оно работало на Firefox?

Edit:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }

Ответы [ 3 ]

171 голосов
/ 14 марта 2011

srcElement является собственностью, изначально принадлежавшей IE. Стандартизированное свойство target:

var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}

Также посмотрите quirksmode.org - Свойства события для получения дополнительной информации о разных браузерах.


По вопросу, что он делает:

event.target / event.srcElement содержит ссылку на элемент, над которым был поднят event. getAttribute('onclick') == null проверяет, назначен ли обработчик события щелчка элементу с помощью встроенной обработки события .

Это важно? Мы не можем сказать, потому что мы не знаем, что делает ...code...

5 голосов
/ 15 марта 2011

В IE объект события уже доступен в объекте окна;в Firefox он передается как параметр в обработчик событий.

Пример

JavaScript:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

Как вы заметили, когда мы вызывали функцию внутри html, мы добавили параметр event на всякий случай, если браузер Firefox.

Я читал в статье, что объект события в IE этоон называется window.event, а в Firefox мы должны указать его как параметр.

Если вам нужно, чтобы он был присоединен в коде:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};
0 голосов
/ 11 апреля 2019

Попробуйте быстрое исправление следующим образом:

Включите в код:

let target = event.target || event.srcElement;

и измените

event.srcElement.XXXXX to target.XXXXX

, что решает проблему с Firefox.

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