#javascript #jquery
#javascript #jquery
Вопрос:
У меня есть следующий фрагмент кода (html, js, jquery) (http://jsfiddle.net/MUScJ/2 /):
<script type="text/javascript">
function someFunc(){
html = '';
z = 1;
for(i=0; i<5; i ){
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(z);">';
z ;
}
$("#container").html(html);
return true;
}
function otherFunc(z){
alert('z:' z);
return true;
}
</script>
<div id="container"></div>
<input type="button" value="Go" onclick="someFunc();" />
Этот скрипт выводит пять кнопок с событием onclick. Функция JS otherFunc
всегда возвращает переменную z, равную 6. Возможно ли это преодолеть? Я хочу, чтобы каждая кнопка имела свое конкретное значение z — 1,2,3 .. и т.д.
Есть идеи?
Ответ №1:
Обновленная демонстрация —http://jsfiddle.net/MUScJ/4 /
Обновленный код —
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(' z ');">';
Ответ №2:
Вы используете строку вместо параметра 🙂 Это ваш обновленный пример.
Но попробуйте заменить onclick на jquery bind. Onclick настоятельно не рекомендуется использовать 🙂
Ответ №3:
Поскольку вы не использовали var
, ваша z
переменная является глобальной. Это плохая новость по многим причинам. Но в вашем случае вызывается ваш onclick otherFunc(z)
, где z
— глобальный z, который получает свое окончательное значение 6.
Одним из возможных исправлений является изменение генерируемого вами HTML:
var z = 1;
var html = '';
for(var i=0; i<5; i ){
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(' z ');">';
z ;
}
Это самый простой способ исправить это, однако вы на самом деле не используете преимущества, которые дает вам jQuery.
Ответ №4:
Да, измените это:
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(z);">';
в это:
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(' z ');">';
Эта проблема является результатом того факта, что вы выполняете итерацию путем увеличения z
, но создаете код, который использует z
(каким бы ни было значение при вызове после создания — в данном случае это 6
) вместо того, чтобы использовать z
для создания статического кода (ввод значения во время создания HTML).).
Ответ №5:
<script type="text/javascript">
function someFunc(){
html = '';
z = 1;
for(i=0; i<5; i ){
html = '<input type="button" value="Button_' z '"'
'onclick="otherFunc(z);">';
z ;
}
$("#container").html(html);
return true;
}
function otherFunc(z) {
return function() {
alert('z:' z);
};
}
</script>
<div id="container"></div>
<input type="button" value="Go" onclick="someFunc();" />