Як я можу змусити event.srcElement працювати у Firefox і що це означає?


80

на веб-сайті моєї компанії є заява if, яка робить одну веб-сторінку несумісною з firefox

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

Я прокоментував умови оператора if і тепер працює з forefox. Моє питання полягає в тому, що таке event.srcElement.getAttribute ("onclick"), чи це важливо, чи не спричинить це проблем у майбутньому? також, чи є щось подібне, я можу замінити умову, щоб вона працювала у firefox?

Редагувати:

 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();
        }
    }

2
Швидкий пошук у Google "event.srcElement" дав це пояснення та рішення .
Гонки легкості на орбіті

Відповіді:


172

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..робиться.


Дякую за цей фелікс, однак я все одно отримую повідомлення про помилку javascript "подія не визначена [Перерва на цю помилку] var target = window.event.target || event.srcElement;" будь-яка ідея чому?
code511788465541441

1
@ user521180: У всіх інших браузерах подія недоступна через, windowале передається як перший аргумент обробнику подій. Тож вам потрібно щось на зразок function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. Або опублікуйте код, де це міститься, якщо вам потрібна додаткова допомога.
Фелікс Клінг

Я відредагував своє оригінальне повідомлення, щоб включити всю функцію
code511788465541441

1
@FelixKling Я думаю, що зараз не підтримується лише від FF Event.srcElement
Alex Char

1
Це слід оновити. Ви маєте рацію, @FelixKling. Event.srcElement тепер не підтримується лише у Firefox. developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX

5

В 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 -->
};

1
Дякуємо за редагування iam тут щойно нового :) ще раз подяки
Марван

Що робити, якщо ви вже передаєте інше значення в цю функцію? Ви просто додаєте "evt" як другий параметр? Як Javascript тоді знає, який параметр є об’єктом події? Це повинен бути перший параметр? чи останнє?
Вінсент

0

Спробуйте швидке виправлення наступним чином:

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

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

і зміни

event.srcElement.XXXXX to target.XXXXX

це вирішує проблему з Firefox.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.