3

結局、これは特に修正が必要な問題ではないと判断しましたが、なぜそれが起こっているのかわからないのが気になります。

基本的に、私はいくつかのチェックボックスを持っています、そして私はユーザーがそれらの特定の数だけを選択できるようにしたいです。私はその効果を達成するために以下のコードを使用しています。


$j( function () {
    $j('input[type=checkbox].vote_item').click( function() {
        var numLeft = (+$j('#vote_num').text());
        console.log(numLeft);
        if ( numLeft == 0 && this.checked ) {
            alert('I\'m sorry, you have already voted for the number of items that you are allowed to vote for.');
            return false;
        } else {
            if ( this.checked == true ) {
                $j('#vote_num').html(numLeft-1);
            } else {
                $j('#vote_num').html(numLeft+1);
            }
        }
    });
});

そして、私がそれをテストしていたとき、私が使用した場合、私は気づきました:


$j('input[type=checkbox]').each( function () {
    this.click()
});

Javascriptは私が期待するように反応しましたが、次のように使用すると次のようになります。


$j('input[type=checkbox]').each( function () {
    $j(this).click()
});

実際には、カウンターのカウントが上がります。

カウンターを使用してカウントを維持するのが最も安全な方法ではないことは理解していますが、必要な量を超える量がデータベースに入力されないようにするサーバー側のエラーチェックがあります。これが私が決定した理由です。実際に修正する必要はありません。

編集:$ jは、noConflictモードでjQueryを使用する必要があるためです...

4

3 に答える 3

6

$(this)にはjQueryラッパー(多くの関数を含む)が含まれていますが、これはDOMオブジェクトのみです。

于 2009-06-30T21:18:59.033 に答える
3

カウンターが上がっているという事実は、使用しているchecked属性と手動でクリックイベントを発生させる間にリンクがあるという手がかりを与えてくれました。

Google で「jquery チェックボックス クリック イベント レイズ」を検索したところ、著者がまったく同じ問題に直面しているこのリンクと、彼が使用した回避策が見つかりました。

http://www.bennadel.com/blog/1525-jQuery-s-Event-Triggering-Order-Of-Default-Behavior-And-triggerHandler-.htm

余談ですが、コードをさらに簡素化できると思います。

$j('input[type=checkbox].vote_item').click( 
function() 
{
    var maxNumberOfChoices = 5;

    //get number of checked checkboxes. 
    var currentCheckedCount = $j('input[type=checkbox].vote_item :checked');

    if(currentCheckedCount > maxNumberOfChoices)
    {
        //It's useful if you show how many choices user can make. :)
        alert('You can only select maximum ' + maxNumberOfChoices + ' checkboxes.');
        return false;
    }

    return true;
});
于 2009-06-30T21:38:53.720 に答える
3

this.click()ブラウザの DOM メソッドを呼び出しますclick()

$(this).click()jQuery メソッドclick()を呼び出します。これは単にブラウザ メソッドを呼び出すだけではありません。詳細については、関数の実装を参照triggerしてください。

于 2009-06-30T21:41:21.983 に答える