3

ダイアログのボタンをクリックして、引数を指定して JavaScript 関数を呼び出そうとしています。ここに投稿できる簡略化されたバージョンのフローは次のとおりです。1) HTML ボタンをクリックすると、関数とボタン ID が引数として「確認」ダイアログに渡されます。2) 確認ダイアログで [はい] をクリックすると、渡された関数が呼び出され、HTML ボタンの ID と値が更新されます。

何らかの理由で、ダイアログは元の引数を使用し続け、更新された引数を取得しません。コードは問題を説明するのにより良い仕事をすると思います。HTML スニペットは次のとおりです。

<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript" src="jquery-ui-1.7.2.custom.js"></script>
<div id="confirmDialog"></div>
<div id="div_input">
    <input type="button" id="1" value="1" onClick="javascript:confirmAction(updateButton, this.id)" />
</div>

そして、ここにJavaScriptスニペットがあります:

function confirmAction(onSuccessFunction, functionArg)
{
    var message = "Are you sure?";
    $('#confirmDialog').html(message);
    $('#confirmDialog').dialog({
        modal: true,
        autoOpen: false,
        title: 'Confirm',
        width: 400,
        height: 150,
        buttons: {
            'Yes': function() {
                $(this).dialog('close');
                onSuccessFunction(functionArg);
            },
            'No': function() {
                $(this).dialog('close');
            }
        }
    });
    $("#confirmDialog").dialog('open');
};

function updateButton(buttonId)
{
    alert(buttonId);
    var buttonHTML = '';
    if(buttonId == '1')
    {
        buttonHTML = "<input type='button' id='2' value='2' onClick='javascript:confirmAction(updateButton, this.id)' />";
    }
    else
    {
        buttonHTML = "<input type='button' id='1' value='1' onClick='javascript:confirmAction(updateButton, this.id)' />";
    }

    document.getElementById("div_input").innerHTML = buttonHTML;
};

confirmAction(...) は、常に buttonId を「1」として updateButton(...) を呼び出します。updateButton(...) を直接「onClick」と呼ぶとうまくいきます。ここで何か不足していますか?

4

1 に答える 1

2

これもjQueryフォーラムに投稿しました - https://forum.jquery.com/topic/jquery-dialog-callback-function-with-arguments。結局のところ、これは古いバージョンの jQuery のバグであり、現在は修正されています。

于 2012-07-06T01:42:40.303 に答える