0

textboxとがあるとしましょうbutton。ボタンをクリックすると機能が実行され、focusoutテキストボックスをクリックするとボタンがクリックされます。私が知りたいのは、ユーザーclickedのボタンの天気、またはfocusoutのイベントによってトリガーされた天気を判断できる方法があるので、テキストボックスによってトリガーされた場合は、イベントでtextboxカスタム作業行うことができますか?clickfocusout

コードを書くことはできますが、どこから始めればよいのかさえわかりません。jqueryeventevent.whichプロパティは知っていますが、この状況で役立つのではないかと思います。

4

4 に答える 4

2

event.targetを使用して、どのDOM要素がイベントを開始したかを判別してから、これがボタンなのかテキストボックスなのかを確認できます。

詳細については、こちらをご覧ください: http: //api.jquery.com/event.target/

文書から:

event.target

ターゲットプロパティは、イベントに登録した要素またはその子孫にすることができます。イベントのバブリングが原因でイベントが処理されているかどうかを判断するために、event.targetをこれと比較すると便利なことがよくあります。このプロパティは、イベントがバブルするときのイベント委任で非常に役立ちます。

于 2012-09-15T15:03:31.310 に答える
0

を使用できますevent.target。デフォルトでは、jqueryはハンドラー関数にイベントを提供します。ここに例があります:jsfiddle

于 2012-09-15T15:11:15.363 に答える
0

これは、次のアプローチを使用してイベントをtextarea blurトリガーするだけの場合、イベントから関数をトリガーする方法によって異なります。click

$('#btn').click(
    function(e){
        buttonActivation(e);
    });

$('#txt').blur(
    function(e){
        $('#btn').click();
    });

次に、オブジェクトを評価して元のイベントが何であるかを確認することをお勧めしoriginalEventます(存在しない場合、関数はjQueryを使用しoriginalEventてプログラムイベントによって呼び出されましたが、評価する場合はボタンがクリックされている必要があります。clickoriginalEvent.typeclick

function buttonActivation(e) {
    if (!e) {
        return false;
    }
    else {
        var oEvent = e.originalEvent;
        if (oEvent === undefined) {
            console.log('Programmatic event');
        }
        else if (oEvent.type == 'click') {
            console.log('User-initiated event');
        }
    }
}

JSフィドルデモ

ただし、次のようなものを使用している場合(単に別の場所から同じ関数を呼び出す):

$('#btn').click(
    function(e){
        buttonActivation(e);
    });

$('#txt').blur(
    function(e){
        buttonActivation(e);
    });

次に、直接評価するe.targetか、次のいずれかをお勧めしますe.type

function buttonActivation(e) {
    if (!e) {
        return false;
    }
    else {
        var oEvent = e.type;
        if (oEvent === 'blur') {
            console.log('Programmatically-triggered event, on ' + oEvent);
        }
        else if (oEvent == 'click') {
            console.log('User-initiated ' + oEvent + ' event');
        }
    }
}

JSフィドルデモ

于 2012-09-15T15:13:38.027 に答える
0

イベントをトリガーするときに追加のパラメーターを渡し、イベントハンドラーでそれらをチェックできます。

だからあなたが書いたなら

button$.trigger('click', 'hello');

次に、次のようなハンドラーを記述できます

button$.on('click', function(e, someStr) {
    console.log(someStr || 'Nothing passed');
    // Obviously if someStr is undefined, the user clicked the button,
    // otherwise the $.trigger() method has been called.
});
于 2012-09-15T15:25:30.747 に答える