我有以下jQuery代码:
<script type="text/javascript" charset="utf-8">
$(function() {
initConfirmbinding();
$('#dialog').dialog({
autoOpen: false,
width: 'auto',
modal: true,
buttons: {
"Delete": function() {
$(this).dialog("close");
alert("You pressed OK!");
return true;
},
"Cancel": function() {
$(this).dialog("close");
return false;
}
}
});
function initConfirmbinding(){
// Dialog Link
$('.confirm').click(function(){
return $('#dialog').dialog('open'); // Here it doesn't stops for the return value!!
});
}
</script>
另一段代码:
...
<c:foreach ...>
<h:commandLink styleClass="confirm" action="#{myBean.delete}">
<img src="/resources/images/delete-bw.png"/>
</h:commandLink>
<c/:foreach>
...
<!-- ui-dialog -->
<div id="dialog" title="Question" style="display: none;">
This item will be deleted, confirm?
</div>
在用户确认对话框之后,我需要调用myBean.delete,但它只是继续并在对话框仍然打开的情况下进行调用。我如何使对话框返回一个同步的值?因此,commandLink可以知道是否执行该操作。
我知道它可以使用回调,但回调不是一个选项,因为commandLink正在等待结果来决定执行动作,如果我使用回调,我将需要直接调用commandLink。点击它会产生无限循环。
甚至认为,再次思考可能有一种方法来使用回调但是我怎么能发送到对话框当它完成时调用哪个回调
没有办法让代码的执行停止并等待。你唯一能做的就是做一个模态对话框,把对话框下面的页面挡住,这样用户在继续之前必须选择一些东西。
在我看来,如果您将bean的#{myBean.delete}
方法暴露为javascript函数并在jQueryUI对话框的Delete
和Cancel
处理程序中相应地调用它,您的问题可以解决。如果可以使用RichFaces库,请参考a4j:jsFunction
但在这种情况下,delete按钮点击必须是纯ajax调用。也就是说,你可以在onclick
中调用对话框,而不指定任何动作。否则,你无法阻止回发的发生。