0

このQ1で私を助けてください
:キャンセルボタンをクリックすると、すべての関数がそれ自体を繰り返し呼び出すように見えます、そして私はIEでのみこれに遭遇します

私のHTML

<button class="btnCaller">diag caller 1</button>
<button type="button" class="btnCaller">diag caller 2</button >

<table id="diagMenu" style="display:none">
    <tr><td>
        <input id="anyField"></input>
        <button id="cmdInsertNewProject">Ok</button >
        <button id="cmdCancelNewProject">Cancel</button >
        </td></tr>  

</table>

私のJS

$(document).ready(function() {
        $('.btnCaller').click(function() {
        fnAddNewProject()
        AddNewProject_ShowUI()
    })
});

function fnAddNewProject() {
    $('#diagMenu').dialog({
        autoOpen: false,
        width: 650,
        maxHeight: 1000,
        maxWidth: 600,
        modal: true,
        resizable: false,
        title: "Insert New Project",
        position: "center"
    })

    $('#btnRun').click(function() {
       alert("do other stuff")
    })
    $('#cmdInsertNewProject').live('click', function() {
        InsertNewProject();
    })

    $('#cmdCancelNewProject').live('click', function() {
        $('#diagMenu').dialog('close');
    })
}  

function InsertNewProject() {
    if ($('#anyField').val() == '') {
        alert("Fill up field to continue") //dont close the dialog
        return false
    } else {
        //reset and exit
        $('#anyField').val('')
        $('#diagMenu').dialog('close');
    }
}

function AddNewProject_ShowUI() {
    $('#diagMenu').dialog('open');
}

私はこれをjsFiddlehttp : //jsfiddle.net/aeris/Qn9HE/に持っています

4

3 に答える 3

0

変化する

.live('click',

.click(

そしてそれはあなたの問題を解決するはずだと私は思います。

編集:

http://api.jquery.com/live/によると、.live()コマンドは非推奨になっているようです。代わりに.on()を使用してみてください。

于 2012-11-19T03:19:37.227 に答える
0

イベントハンドラーの登録方法に問題があります。クリックイベントハンドラーは1回だけ追加する必要があるため、これはready()メソッドで実行できます。

また、関数呼び出しをに移動できるように、fnAddNewProject()すべてではなく1回だけ実行する必要があります。clickready()

あなたはそれがここで働いているのを見ることができます。

于 2012-11-19T03:42:31.133 に答える
0

したがって、すでに指摘したように、ハンドラーをダイアログに登録する方法により、イベントが発生するたびにハンドラーが再登録されます。その結果、ポップアップが繰り返し表示されます(毎回新しい登録が行われるため)。

そうは言っても、jQueryUIのダイアログのbuttonsプロパティを使用して、ボタン(および対応する関数)をダイアログにアタッチでき、このすべてのイベント登録について心配する必要はありません。私はそれを完了しませんでしたが、ここであなたの例を更新しました(あなたは注意するでしょう-それははるかに簡単です)。ダイアログの一部である「buttons」プロパティに注意してください。

$('#diagMenu').dialog({
    autoOpen: false,
    width: 650,
    maxHeight: 1000,
    maxWidth: 600,
    modal: true,
    resizable: false,
    title: "Insert New Project",
    position: "center",
    buttons: {
        "OK": function() {
            InsertNewProject();
            $(this).dialog("close");
        },
        "Cancel": function() {
            $(this).dialog('close');
        }
    },
    Cancel: function() {
        $(this).dialog("close");
    }
});
于 2012-11-19T03:53:13.637 に答える