Как я могу заставить event.srcElement работать в Firefox и что это значит?
на веб-сайте моей компании есть оператор if, который делает одну веб-страницу несопоставимой с firefox
if(event.srcElement.getAttribute("onclick") == null){
...code..
document.mainForm.submit();
}
Я прокомментировал условия if 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();
}
}
Ответы
Ответ 1
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..
.
Ответ 2
В 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 -->
};