ダイアログのボタンをクリックして、引数を指定して 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」と呼ぶとうまくいきます。ここで何か不足していますか?