1

私は一連の入力を持っています:

<input class="test"></input>
<input class="test"></input>
<input class="test"></input>
<input id="diff" class="test"></input>

そして、ユーザーがこれらの入力をクリックしたときに何かを行うためのいくつかのjQuery:

$(function () {
    $(".test").on("click", function () {
        alert("test");
    });
    $("#diff").on("click", function () {
        alert("diff");
    });
});

現在、4番目のテキストボックスには2つのアラートが表示されます。「テスト」というデフォルトのアラートを「上書き」して、「差分」とだけ言うにはどうすればよいですか?

どうもありがとう。

フィドル: http: //jsfiddle.net/G3PAy/

どうもありがとう。

4

4 に答える 4

2

さまざまなハンドラーの優先度を指定する方法はないと思うので、最初のクリックハンドラーで明示的に除外する必要があります。

$(".test:not(#diff)").on("click", function () {
    alert("test");
});

2番目のクリックハンドラー(の#diff)はそのままです。

于 2013-03-04T16:40:13.813 に答える
1

あなたがこれについて間違った方向に進んでいるのではないかと私は思います。

まず、#diffタグが同じクラスを持たないようにタグを設計する必要があると思います。1つの方法は、同じCSSルールを新しいクラスに次のように適用することです。

.test
{
/* CSS rules */
}

になります

.text, .newClass
{
/* new CSS rules */
}

ただし、それを望まない場合は、jQueryの他のプロパティに対してテストできます。

次のコードを使用して、目的の結果を得ることができます。

$(function () {
    $(".test").on("click", function () {
        if( !$(this).is("#diff"){
        alert("test");
        }
    });
    $("#diff").on("click", function () {
        alert("diff");
    });
});
于 2013-03-04T16:42:36.787 に答える
1

これを行うには、達成しようとしていることの論理的な詳細に応じて、さまざまな方法があります。

私はそれを次のように解釈することを選びました:

  1. 入力がクリックされるたびに、テストを実行します
  2. の場合は#diff、アラートを送信するか、または
  3. の場合は、それ.testについて私たちに警告してください

非常に効果的に、一連のテストがあり、いくつかの条件が他の条件をオーバーライドします。これを行うには、jQueryで一般的なセレクターを実行してから、elseif論理ステートメントを使用してアクションのコースを決定します。

ここで変更されたコード:

$(function () {
    $("input").on("click", function () {
        if($(this).is('#diff')){
            alert("diff");
        }
        else if($(this).is('.test')){
            alert("test");
        }
    });
});

ここでのデモ:http: //jsfiddle.net/barney/QkrbK/

于 2013-03-04T16:43:27.927 に答える
1

event.stopImmediatePropagation()を使用してインラインクリックイベントを試してください

<input id="diff" class="test" onclick="show();event.stopImmediatePropagation();"></input>

function show() {
    alert("diff");
}

サンプルを参照してください

于 2013-03-04T17:09:01.333 に答える