jqModal对话框 - 仅显示一次

时间:2010-05-09 14:38:51

标签: jquery jqmodal

我有一个jqModal对话框,其中包含以下代码:

  $(document).ready( function() {

    $('td.item.active').click( function(e) {

      $(this).append( '<div class="new">&nbsp;</div>' );

            $("#jqModal").jqm({
                modal:true, 
                onHide: function(e) { 
                    e.w.hide(); // Hide window
                    e.o.remove(); // Remove overlay
                }
            });

            $('#jqModal').jqmShow();

            $('input#add_session').click( function(e) {
              e.preventDefault();
                $('#jqModal').hide();
                $('.jqmOverlay').remove();
            });

    });

  });

使用的HTML如下:

 <div id="jqModal" class="jqmWindow">
    <form action="" method="post">

      <ul>

        <li>
          <input id="add_session" name="commit" type="submit" value="Add Session" /> <input type="button" name="close" value="Close" id="close" class="jqmClose" />
        </li>

      </ul>

    </form>
  </div>

当我第一次点击<td>时,对话框会毫无问题地启动。在第二次单击(或后续)时,new类将添加到<div>,但对话框不会启动。

1 个答案:

答案 0 :(得分:2)

在黑暗中拍摄,如果你说的是没有重新创建模态,请不要手动破坏它,而是调用它的.jqdHide()方法。此外,您的input点击处理程序位于<td>的点击处理程序中,不确定这是否是故意的,以修复将代码调整为:

$(function() {
  $('td.item.active').click( function(e) {
    $(this).append( '<div class="new">&nbsp;</div>' );
    $("#jqModal").jqm({
      modal:true, 
      onHide: function(e) { 
        e.w.hide(); // Hide window
        e.o.remove(); // Remove overlay
      }
    }).jqmShow();
  });
  $('input#add_session').click( function(e) {
    e.preventDefault();
    $('#jqModal').jqmHide();
  });
});

如果您在代码中添加 <td>元素并且没有针对它们触发点击处理程序,那么您需要使用.live()以便处理程序处理具有该类组合的当前和未来<td>元素,因此不是:

  $('td.item.active').click( function(e) {

你会这样称呼:

  $('td.item.active').live('click', function(e) {