1

私はこのコードを持っています:

$(document).ready(function() {
    $('.mostrar_usuario_link').on('click', function() {
        $("#mostrar_usuario_dialog").dialog({
            modal:false
        }) 
    });
})

そのクラスの一部である要素(.mostrar_usuario_link)は、要求された場合にのみajaxを介して動的に作成されるため、ドキュメントの準備ができているときには存在しません。とにかく、ダイアログが表示されることはなく、それが原因かどうか疑問に思っていました。

ちなみに、.mostrar_usuario_linkクラスの要素のセットは<a>タグであり、AjaxサポートにDOJOを使用しています。

これについて何か助けを得ることができますか?

4

4 に答える 4

2

正しい使用法は次のとおりです。

$("body").on("click", ".mostrar_usuario_link", function() {
    ...
});

代わりに、のbody任意の親要素を使用できますmostrar_usuario_link

参照:

于 2012-06-05T21:18:07.810 に答える
1

document要素は、他のHTMLをロードする前にドキュメントの先頭で使用できるため、ドキュメントの準備が整うのを待たずに、そこにイベントを添付しても安全です。

http://api.jquery.com/on/#direct-and-delegated-events

$("document").on("click", ".mostrar_usuario_link", function() {
    ...
});

また、これをすでに行っているかどうかはわかり<a>ませんが、要素がタグである場合は、アンカータグのデフォルトのアクションを防ぐために、preventDefaultが必要になる場合があります。

$("document").on("click", ".mostrar_usuario_link", function(e) {
    //Prevent Default action from link
    e.preventDefault();
    ...
});
于 2012-06-05T21:20:06.227 に答える
0

AJAXを使用する場合は、要求するHTMLが(非同期で)準備できたら、イベントを再割り当てする必要があります。そうする方法は?見てください:

   $.ajax({
      url: '....',
      success: someFunction
   }); 

これで、おそらくsomeFunctionのコードがすでにあるはずです。これは次のとおりです。

function someFunction(){
  $('.mostrar_usuario_link').on('click', function() {
      $("#mostrar_usuario_dialog").dialog({
          modal:false
      }) 
  });
}

おそらくすでにご存知のように、データパラメータを使用して新しいHTMLを成功させることができます。詳細については、jQueryの.ajaxドキュメントを参照してください。

于 2012-06-05T21:35:54.390 に答える
0

私は自分の問題を解決する方法を見つけました。Dojoのアンカータグ(<sx:a>)を使用していたため、独自のスクリプトのみを実行していました。ただし、「afterNotifyTopics」属性を使用して、応答後に実行するスクリプトを指定できます。

HTMLは次のとおりです。

<s:url id="mostrar_usuario_url" action="mostrar_usuario.action">
    <s:param name="id_usuario" value="%{id_usuario}"/>
</s:url>
<sx:a cssClass="mostrar_usuario_link" id="mostrar_usuario_link_%{id_usuario}" targets="mostrar_usuario_dialog" href="%{mostrar_usuario_url}" afterNotifyTopics="lanzarCuadro">
    <s:property value="id_usuario"/>
</sx:a>

そしてここにJavaScriptがあります:

$(document).ready(function() {
    dojo.event.topic.subscribe("lanzarCuadro", function() {
        $("#mostrar_usuario_dialog").dialog({
            modal:true
        })
    });
}

皆様のご支援ありがとうございました。

于 2012-06-06T01:57:02.763 に答える