2012-03-01 2 views
1

Если я делаю следующее, переменная передается подключенному прослушивателю событий, где я хочу, чтобы значение переменной в момент добавления отправителя события было передано.Значения пропуска Javascript для функции при прослушивании событий

foo=a;  
document.addEventListener('mousedown', function() { doSomething(foo) }, false); 
foo=b; 

doSomething(val){ 
alert(val); 
} 

поэтому он должен предупредить «a» не «b»;

+0

насчет создания копии значения при добавлении прослушивателя событий? –

+0

Он должен быть статичным, поскольку будет создано несколько кнопок. – user1209203

+0

сценарий прав, когда будет предупреждать «b», а не «a», потому что к моменту, когда пользователь нажимает, foo уже имеет значение «b»; что вы получили там с addEventListener, вы назначаете функцию этому событию, поэтому при запуске события функция выполняется – Liviu

ответ

7

что-то вроде:

var foo = 'a';  

document 
.getElementById('foo') 
.addEventListener('click', function(bar) { 

    // return the actual event handler function 
    return function() { 
    doSomething(bar); 
    }; 

}(foo) /* <-- call the anonymous function, passing in the current foo*/, false); 

foo = 'b'; 

function doSomething (val) { 
    alert(val); 
}​ 

демо: http://jsfiddle.net/gS9wu/1/

+0

wow gold star для вас! – user1209203

0

Поскольку foo является глобальным, тогда foo перезаписывается на линии 3 до обнаружения события.

Вы можете рассмотреть вопрос о выборке значения обув и хранить его на объекте или в плагине или сходное с абстрагировать от обычного кода потока или передать его в функцию обратного вызова:

документа. addEventListener ('mousedown', (function (outerFoo) {doSomething (внешнийFoo);}) (foo), false);

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