2

我的每条语句只会影响最后一个元素。我想猜测它与我的变量逻辑有关,但我不明白这有什么意义,因为我使用 $(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>
4

4 回答 4

11

问题是您没有声明这些变量,因此它们不是函数的本地变量,只使用一个变量并且每次调用迭代器函数时都会覆盖(如果您没有在任何地方声明它们,您'正在成为隐式全球恐怖的牺牲品)。在变量前面添加var以使它们特定于对迭代器函数的每次调用,例如:

$("form").each( function() {
    var $this = $(this);
    var $submit = $this.find('.submit');
    var $textarea = $this.find('textarea');
    // ...
于 2013-05-06T13:45:47.317 回答
2

另一种方法

$(document).on('keyup', 'form textarea', function(){
    var $this = $(this);
    $this.next('.submit').prop('disabled', $this.val().length === 0)
});
$('form textarea').trigger('keyup')

演示:小提琴

于 2013-05-06T13:54:44.997 回答
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');
});

演示 JS http://jsfiddle.net/dhfBE/

于 2013-05-06T13:51:22.277 回答
0

这应该是可能的,无需任何分配且无需显式each.

尝试 :

$("form textarea").on('keyup', function() {
    $(this.form).find('.submit').attr("disabled", this.value.length === 0);
}).trigger('keyup');
于 2013-05-06T14:16:15.460 回答