escopo de variáveis ??no atributo onclick com Javascript
-
21-08-2019 - |
Pergunta
Eu estou usando Prototype e tentando acessar dinamicamente uma variável em um loop.
Código fala melhor do que eu:
for (var i=0;i<5;i++) {
$('parent' + i).insert('<input type="button" value="Cancel" onclick="$('parent' + i).remove()" />', {position: 'after'});
}
O problema é que "i não está definido" quando eu clicar em qualquer um dos botões Cancelar.
Como faço para alterar o escopo de variáveis ??para que "i" mantém o valor adequado para cada botão? Eu não estou interessado em qualquer arroud trabalho.
Solução
Eu acho que você estava colocando i
na cadeia entre aspas, em vez de parent
assim foi no nível errado de escopo (conceitualmente falando).
for (var i=0;i<5;i++)
{
$('parent' + i).insert(
'<input type="button" value="Cancel" onclick="$(\'parent' + i +
'\').remove()" />', {position: 'after'});
}
Outras dicas
Você pode fazê-lo assim -
for (var i = 0; i < 5; i++) {
$('parent' + i).insert('<input type="button" value="Cancel" onclick="$(\'parent' + i + '\').remove()" />', {position: 'after'});
}
Ele será processado como este -
<input type="button" value="Cancel" onclick="$('parent1').remove()" />
<input type="button" value="Cancel" onclick="$('parent2').remove()" />
<input type="button" value="Cancel" onclick="$('parent3').remove()" />
...
e assim por diante.
não é necessário que a variável i. se você deseja remover pai dessa entrada, fazer:
<input type="button" value="Cancel" onclick="this.parentNode.parentNode.removeChild(this.parentNode)" />
ou se você realmente quer, você pode:
for (var i=0;i<5;i++) {
$('parent' + i).insert('<input type="button" value="Cancel" onclick="$(\'parent' + i + '\').remove()" />', {position: 'after'});
}