Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Повесить обработчик на несколько элементов (https://javascript.ru/forum/events/9072-povesit-obrabotchik-na-neskolko-ehlementov.html)

trikadin 27.04.2010 22:08

Повесить обработчик на несколько элементов
 
Народ, как повесить событие на все строки ввода разом?? Функция "clearDefault(elem)" - функция, стирающая значение строки ввода, если оно равно заданному. Её код:
clearDefault(elem){
 elem.value= elem.value==defaultValue ? "" : elem.value
}


window.onload=function(){
    var elems = document.getElementsByTagName('input');
    for(var i=0; i<elems.length; i++){
        if( (elems[i].type == "text" || elems[i].type=="password") & !elems[i].readOnly){
            if(isMSIE()) {elems[i].attachEvent("onfocus", function(){clearDefault(elems[i])})
            }
            else {elems[i].addEventListener("focus", function(){clearDefault(elems[i])}, false)
            }
        };
    }
}


Что в этой шняге неправильно?

P.S. isMSIE() - функция, определяющая, уж не эксплорер ли это часом: если эксплорер, возвращает true, если нет - соответственно, false.

Riim 28.04.2010 07:24

window.onload=function(){
    var elems = document.getElementsByTagName('input');
    for(var i=0; i<elems.length; i++){
        if( (elems[i].type == "text" || elems[i].type=="password") && !elems[i].readOnly){
            if(window.ActiveXObject) {elems[i].attachEvent("onfocus", (function(el){return function() {clearDefault(el)}})(elems[i]))
            }
            else {elems[i].addEventListener("focus", (function(el){return function() {clearDefault(el)}})(elems[i]), false)
            }
        };
    }
}


Вам нужно почитать про замыкания.

trikadin 28.04.2010 20:41

Огромное спасибо... Хм... Почему return function, а не просто function? Вот тут:
return function() {clearDefault(el)}

Если несложно, дайте ссылку...

trikadin 28.04.2010 22:16

Оу... Осознал всю глупость этой просьбы... Простите)


Часовой пояс GMT +3, время: 14:59.