2013-07-23 2 views
0
for (key in this.mybutton) 
     button = this.mybutton[key] 

     $(button).click(function() { 
      console.log("click:" + button) 
     }); 

Результат - это имя последней кнопки. Как добавить несколько слушателей в jQuery/javascript или удалить ссылку ссылки javascript на строку в for.Как добавить нескольких слушателей в jQuery/javascript?

заранее спасибо

+0

Использование «этого», или, может быть, вам нужно предубеждение. Не могли бы вы представить рабочий образец как jsfiddle, который показывает, что вы ищете? –

ответ

2

Вам нужно закрытия новой область:

for (key in this.mybutton) 
    (function(button) { 
     $(button).click(function() { 
      console.log("click:" + button) 
     }); 
    })(this.mybutton[key]); 
} 

или просто использовать this:

$(button).click(function() { 
    console.log("click:" + this) 
}); 

Конкатенации в DOM элемента и строку в журнале консоли не кажется очень хорошей идеей?

+0

Нет, не замыкание (обработчик событий * уже * замыкание). Вам нужно создать новую * область *. [См. Мои комментарии здесь] (http://stackoverflow.com/questions/17517111/javascript-binding-click-handller-inside-a-loop/17517127#comment25470265_17517127) для более подробного объяснения (это касается только первого фрагмента , конечно же, второе - намного лучшее решение). –

+0

@FelixKling - спасибо, это хорошее объяснение, и даже если я понял, почему это сработало, я никогда не думал о том, что любая функция создаст закрытие, и поэтому закрытие не является причиной, по которой она работает, передавая параметр, чтобы он был постоянным в пределах __new scope__ is! – adeneo

+0

спасибо, именно то, что я хочу. Конкатенация была просто для того, чтобы дать простой пример моей проблемы, у нее нет реальной полезности: p – Thomas

Смежные вопросы