1

我有这段代码:

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

当文档准备好时,属于该类的元素 (.mostrar_usuario_link) 不存在,因为只有在请求时才通过 ajax 动态创建这些元素。无论如何,对话框从未显示,我想知道是否是因为这个。

顺便说一句,.mostrar_usuario_link 类中的元素集是 < a > 标签,我正在使用 DOJO 来支持 Ajax。

我能得到任何帮助吗?

4

4 回答 4

2

下面是正确的用法:

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

body可以使用mostrar_usuario_link.

参考:

于 2012-06-05T21:18:07.810 回答
1

在加载任何其他 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
      }) 
  });
}

正如您可能已经知道的那样,您可以通过data参数在success中获得新的 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 回答