1

この問題は非常に一般的であるように思われ、他の人に有効だった提案されたすべての解決策を調査して試してみたところ、私にはうまくいきませんでした。追加するには、firebug もエラーを表示していません。

Jquery モーダル ダイアログを使用しています。ダイアログは、グリッドの列のリンクから開きます。問題は、一度しか開かれず、閉じるボタンでダイアログが閉じられないことですが、右上隅の (X) で閉じることができます。ただし、別の列の値に対してダイアログを再度開いても、ダイアログは開かれません (ただし、サーバー側のアクション クラスは実行されます)。助けてください。

関連コード: 親ページ (jsp)

 <s:url id="testurl" action="openView"/>
 <script type="text/javascript">
 $(function(){
  $("#dialogOne").dialog({
      autoOpen: false,
      title: 'Details',
      modal:true,
      width:970,
      buttons: { "Close": function() { $(this).dialog("close"); } },
      open: function(event, ui) { $(".ui-dialog-titlebar-close").show(); }
      });

});

 function formatLink(cellvalue, options, rowObject) {
                                    return "<a href='#' onClick='javascript:openDialog("+cellvalue+");return false;'>" + cellvalue + "</a>";
                                    }
                                function openDialog(number) {
                                    $("#dialogOne").load("<s:property value="testurl"/>?Number="+number);
                                    $("#dialogOne").dialog('open');
                                }    

関連するグリッド列:

 <sjg:gridColumn 
                                            name="number" 
                                            index="nsNumber" 
                                            title="View Action" 
                                            formatter="formatLink" 
                                            sortable="false" 
                                            width="80"

                                    />

私は ajax ソリューションを試しましたが、ドキュメントの準備ができて提案されたバリエーションが機能しませんでした。アクション openView は jsp を返し、そのページの div id がすべて一意であることを確認しました。Firebug はエラーを表示しません。ダイアログは 1 回だけ開き、ダイアログの [閉じる] ボタンで閉じることはできません。その後、ダイアログを開く (/reopen) ことができません。

ありがとうございました、

4

1 に答える 1

0

これはスクリプトの設定に問題があると思います。イベント ハンドラーが適切に初期化されていないため、イベントが期待どおりに実行されていません。

通常、ページが読み込まれるときにページを初期化する必要があります。私はハンドラーを $(document).ready() 関数でラップすることで最大の成功を収めました。これに加えて、使用している onClick メソッドも疑わしいです。jQuery を使用している場合は、タグ自体に onClick を割り当てないようにすることをお勧めします。jQuery とそのバインディング メカニズムを使用することで、動的ページ要素がイベント ハンドラーに関して期待どおりに機能しないという問題を回避できます。

 function formatLink(cellvalue, options, rowObject) {
          return "<a href='#' class='dialogLink' data-cell='cellvalue'>" + cellvalue + "</a>";
      }

 $(document).ready(Function(){

       $("#dialogOne").dialog({
            autoOpen: false,
            title: 'Details',
            modal:true,
            width:970,
            buttons: { "Close": function() { $(this).dialog("close"); } },
            open: function(event, ui) { $(".ui-dialog-titlebar-close").show(); }
       });

       // This will bind the event handler to any link with this class. The data 
       // attribute is used to set/get the cellvalue from the link that is clicked.
       $('.dialogLink').on('click', function(){
            var number = $(this).data('cell');
            $("#dialogOne").load("<s:property value="testurl"/>?Number="+number);
            $("#dialogOne").dialog('open');
        });

  });
于 2012-07-19T13:28:25.677 に答える