我的每个语句只会影响最后一个元素。我想猜测它与我的变量逻辑有关,但我不知道这是多么合理,因为我使用$(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>
答案 0 :(得分:10)
问题是你没有声明那些变量,因此它们不是函数的本地变量,只使用单个变量并且每次调用迭代器函数都会被覆盖(和如果你还没有在任何地方宣布它们,你就会成为The Horror of Implicit Globals的牺牲品。在变量前面添加var
,使它们特定于每次调用迭代器函数,例如:
$("form").each( function() {
var $this = $(this);
var $submit = $this.find('.submit');
var $textarea = $this.find('textarea');
// ...
答案 1 :(得分:2)
另一种方法
$(document).on('keyup', 'form textarea', function(){
var $this = $(this);
$this.next('.submit').prop('disabled', $this.val().length === 0)
});
$('form textarea').trigger('keyup')
演示:Fiddle
答案 2 :(得分:1)
试试这个,
<强>脚本强>
var $this, $submit, $textarea, validated;
$("form").each( function() {
$this = $(this);
$submit = $this.find('.submit');
$textarea = $this.find('textarea');
$submit.attr("disabled", "disabled");
$textarea.keyup(function(event){
validated = ($(this).val().length === 0) ? false : true;
if(validated) {
$(this).next().removeAttr("disabled");
} else {
$(this).next().attr("disabled", "disabled");
}
});
$textarea.trigger('keyup');
});
答案 3 :(得分:0)
这应该是可能的,没有任何分配,也没有明确的each
。
尝试:
$("form textarea").on('keyup', function() {
$(this.form).find('.submit').attr("disabled", this.value.length === 0);
}).trigger('keyup');