Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вопрос про события (https://javascript.ru/forum/jquery/17858-vopros-pro-sobytiya.html)

see613 06.06.2011 12:28

Вопрос про события
 
может кто знает, почему
$('.A').live('click', function(){
                alert('.A');
   	    }); 
        $('.B').live('click', function(){
                alert('.B');
   	    });

работает, а
var selectorArr = ['A', 'B'];        
        var selectorArr   = ['A', 'B'];        
        var classArr      = [];
            classArr['A'] = '.A';
            classArr['B'] = '.B'; 

        for (var key in selectorArr) {
            var name     = selectorArr[key];
            var selector = classArr[name];

            $(selector).live('click', function(){
                alert(selector);
       	    });            
    	       
    	}

не работает, вместо этого он на оба селектора будет выводить в алерте '.B', причем не просто .B, а именно последний элемент в selectorArr, тоесть если поменять местами -
var selectorArr = ['B', 'A'];

то будет всегда выводить '.A'. Если поставить еще алерт в for за пределами live, и вывести name и selector, то в нем выведет всё как надо. в фаербаге смотрел объекты event-ов - в обоих случаях, всегда одни и те же. WTF :-E

Matre 06.06.2011 12:45

http://javascript.ru/basic/closure#p...-ispolzovaniya

see613 06.06.2011 21:32

спасибо, можно закрыть тему

Sweet 06.06.2011 21:44

Осталось только расширить Array.prototype и прювет:)

see613 06.06.2011 22:32

к сожалению, мое кунг-фу не настолько хорошо, чтоб сходу понять что даст расширение массива в данном случае, поэтому актуально было б сказать - намекнитеподскажите

Sweet 06.06.2011 22:40

Почитай.

see613 06.06.2011 23:44

ну насколько я понял в моем случае, for in не должен натворить ни какой лабуды, так как я задаю массив, у него нет доп.свойств, да и на порядок чихать, поэтому это вполне жизнеспособный вариант.


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