-1

Jquery UI を使用して 2 つのボタンを作成し、次のイベントを添付しました。

function testconfirm() {
   alert( "testconfirm");
} 

function testCancel() {
   alert( "testCancel");
}

イベントが発生しないのは初めてです。その後は正常に動作します。

http://jsfiddle.net/qNGEw/26/

次の Fiddle に投稿されたコードの何が問題なのかを特定するのを手伝ってくれる人はいますか?

4

1 に答える 1

1

常にクリックイベントをトリガーしますが、意図したとおりに実行していない可能性があります。まず、テスト機能として両方のボタンにイベントをバインドします。したがって、最初のクリックでテスト関数をそのハンドラーとして実行し、メッセージを警告する実際のハンドラーを再度アンバインドしてバインドします。したがって、最終的に2回目以降のクリックから、アラートを持つハンドラーが実行されました。

 function test() {
            //Binding during the first click
            $('#btnconfirm').unbind('click').on("click", testconfirm);
            $('#btnCancel').unbind('click').on("click", testCancel);
        }
        var buttonPane = $("#message1");
        $.each(dialog_buttons, function (index, props) {
            $(buttonPane).append('<span class="ui-button-text" id="btn' + props.id + '">' + props.text + '</span>');
              //Binding for the first time
            $('#btn' + props.id).button().unbind('click').on("click", test); 

        });

このバインディングの問題は、次の方法で簡単に解決できます。

ダイアログ ボタンの props を設定するときに、handler のプロパティも追加します。

var AlertTest = {
    "message1": {
        "buttons": [{
            id: "confirm",
            text: "Yes",
            handler: testconfirm //add one more property for the handler
        }, {
            id: "Cancel",
            text: "No",
            handler: testCancel //add one more property for the handler
        }]

    }
}

ボタンを作成するときにイベントをバインドするだけです。

 $('#btn' + props.id).button().on("click", props.handler);

フィドル

于 2013-09-23T05:12:11.687 に答える