2

my each ステートメントは最後の要素にのみ影響します。変数ロジックと関係があると推測したいのですが、 $(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

問題は、これらの変数を宣言していないため、関数に対してローカルではないことです。単一の変数のみが使用され、イテレータ関数の呼び出しごとに上書きされます (どこにも宣言していない場合は、The Horror of Implicit Globals の餌食になっています )。変数の前に追加varして、イテレータ関数への各呼び出しに固有のものにします。例:

$("form").each( function() {
    var $this = $(this);
    var $submit = $this.find('.submit');
    var $textarea = $this.find('textarea');
    // ...
于 2013-05-06T13:45:47.317 に答える
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 に答える