0

次のコードの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>と、ダイアログが問題なく起動します。2回目のクリック(またはそれ以降)で、newクラスがに追加されます<div>が、ダイアログは起動しません。

4

1 に答える 1

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) {
于 2010-05-09T14:55:38.137 に答える