使用jQuery对话框的带参数回调函数
我试图通过单击对话框中的按钮来调用带有参数的javascript函数。下面是一个简化版本的流程,我可以在这里发布: 1) 单击HTML按钮时,将函数和按钮ID作为参数传递给“确认”对话框。 2) 在确认对话框中单击“是”,调用传入函数,该函数只更新HTML按钮的ID和值 由于某些原因,对话框一直使用原始参数,而从未获得更新的参数。我认为代码可以更好地解释这个问题。以下是HTML代码片段:使用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
<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”。它看起来确实像是缓存的,但我不确定在哪里。有没有办法“销毁”对话框并每次创建它?