使用jQuery对话框的带参数回调函数

使用jQuery对话框的带参数回调函数,jquery,jquery-ui,Jquery,Jquery Ui,我试图通过单击对话框中的按钮来调用带有参数的javascript函数。下面是一个简化版本的流程,我可以在这里发布: 1) 单击HTML按钮时,将函数和按钮ID作为参数传递给“确认”对话框。 2) 在确认对话框中单击“是”,调用传入函数,该函数只更新HTML按钮的ID和值 由于某些原因,对话框一直使用原始参数,而从未获得更新的参数。我认为代码可以更好地解释这个问题。以下是HTML代码片段: <script type="text/javascript" src="jquery-1.3.2.js

我试图通过单击对话框中的按钮来调用带有参数的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;
};
函数确认(onSuccessFunction,functionRG)
{
var message=“你确定吗?”;
$('confirmDialog').html(消息);
$('confirmDialog')。对话框({
莫代尔:是的,
自动打开:错误,
标题:“确认”,
宽度:400,
身高:150,
按钮:{
“是”:函数(){
$(this.dialog('close');
onSuccessFunction(functionRG);
},
“否”:函数(){
$(this.dialog('close');
}
}
});
$(“#confirmDialog”).dialog(“打开”);
};
函数更新按钮(buttonId)
{
警报(按钮);
var buttonHTML='';
如果(buttonId=='1')
{
buttonHTML=“”;
}
其他的
{
buttonHTML=“”;
}
document.getElementById(“div_输入”).innerHTML=buttonHTML;
};

Confirmation(…)始终调用updateButton(…),buttonId为“1”。如果我直接调用updateButton(…)为“onClick”,效果会很好。我在这里遗漏了什么吗?

我也在jQuery论坛上发布了这篇文章-。事实证明,这是jQuery旧版本中的一个bug,现在已经修复。

我强烈建议使用
document.getElementByid('..').setAttribute('id',…)而不是
.innerHTML
。(删除了我之前的评论,因为我还没有完全阅读OP)塔兹,谢谢你的提示。我更改了代码,但这并没有解决这个问题。不管怎样,我都会保留修改过的代码,因为这是一种更好的方法。我认为浏览器或jQuery在某个时候缓存了参数的值。您不必重置分配给按钮的回调-一旦更改了
id
属性的值,
this.id
应反映此更改。你的代码在我看来还不错,除非我也遗漏了什么。在文本中不使用
javascript:
的情况下尝试,然后使用类似Chrome的inspector的工具一步一步地调试脚本,查看调用函数时
id
的实际值是什么,以及它使用的值来自何处。删除
javascript:
没有帮助。当调用函数
confirmation(onSuccessFunction,functionRG)
时,在Chrome或Firebug中调试会向我显示
functionRG
的正确值,但一旦调用“Yes”上的单击事件,该范围内的
functionRG
的值就会更改为“1”。它看起来确实像是缓存的,但我不确定在哪里。有没有办法“销毁”对话框并每次创建它?