我的每个语句只会影响最后一个元素。我想猜测它与我的变量逻辑有关,但我不明白这有什么意义,因为我使用 $(this) 定位该语句内
JS
$("form").each( function() {
$this = $(this);
$submit = $this.find('.submit');
$textarea = $this.find('textarea');
$submit.attr("disabled", "disabled");
$textarea.keyup(function(){
var validated = true;
var validated = ($textarea.val().length === 0) ? false : true;
if(validated) {
$submit.removeAttr("disabled");
} else {
$submit.attr("disabled", "disabled");
}
});
$textarea.trigger('keyup');
});
基本 HTML:
<form>
<textarea rows="13"></textarea>
<button class="btn submit">Chercher</button>
</form>
<form>
<textarea rows="13"></textarea>
<button class="btn submit">Chercher</button>
</form>
最佳答案
问题是您没有声明这些变量,因此它们不是函数的本地变量,仅使用一个单个变量,并且每次调用迭代器函数时都会覆盖该变量(并且如果你没有在任何地方声明它们,你就会成为 The Horror of Implicit Globals 的牺牲品)。在变量前面添加 var
以使它们特定于对迭代器函数的每次调用,例如:
$("form").each( function() {
var $this = $(this);
var $submit = $this.find('.submit');
var $textarea = $this.find('textarea');
// ...
关于jQueryeach只影响最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400072/