等待确认对话框返回值

问题描述 投票:0回答:2

我有以下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>

我需要在用户确认dialog之后调用myBean.delete,但是它只是继续进行并使得对话框仍处于打开状态。如何使对话框返​​回同步值?因此,commandLink可以知道是否执行该动作。

我知道它可以使用callbacks,但是由于commandLink正在等待结果决定执行该操作,因此不能使用回调,如果我使用回调,则需要直接调用commandLink.click,这将导致无限循环。

即使想了,再想一想,可能有一种使用callbacks的方法,但是我怎么能发送给dialog完成后要调用哪个回调。

java jquery ajax jsf-2 jquery-events
2个回答
0
投票

没有办法使代码的执行停止并等待。您唯一可以做的就是通过屏蔽对话框下的页面来创建模式对话框,以便用户在继续之前必须选择一些内容。


0
投票

我的看法,如果将bean的#{myBean.delete}方法公开为javascript函数并在jQueryUI对话框的DeleteCancel处理程序中进行相应调用,则可以解决您的问题。如果可以使用RichFaces库,请参阅a4j:jsFunction但是在这种情况下,删除按钮的单击必须是纯ajax调用。也就是说,您可以在a4j:jsFunction中调用对话框,而无需指定任何操作。否则,您无法阻止回发的发生。

© www.soinside.com 2019 - 2024. All rights reserved.