我正在使用一些使用Smarty块模板的软件,它“简单地”包含“另一个”模板;

 {include file='frontend/folder/file.tpl'}


但是,然后我尝试在get上使用jQuery的所有操作都会被完全忽略,例如没有将其添加到DOM中,例如:

<label id="testonetwothree">test</label>


然后在js文件中(是​​的,包括jQuery)

$('#testonetwothree').click(function(e){console.log('test);});


当您单击标签时,什么也没有发生,这告诉我它没有添加到DOM中,因此找不到它,但是,当我检查事件的来源是:

     $( "body" ).click(function( event ) {
console.log("ID: " + event.target.id );
}


显然已单击元素“ testonetwothree”,因此我实际上可以这样做;

$( "body" ).click(function( event ) {
if(event.target.id == "testonetwothree"){
            console.log('clicked testonetwothree');
        }
 });


但这几乎不是解决方案,我觉得我只是没有正确添加到DOM中,或者我在某个地方出错了,如果有Smarty经验的人可以提供帮助,我将不胜感激。

最佳答案

正如我在评论中提到的,您可以将动态元素绑定与.on()一起使用
例:

$('body').on('click', '#testonetwothree', function(){ console.log('testity');});


现在,关于event.target.id == "testonetwothree" vs $('body').on('click', '#testonetwothree
这些不是等效项,首先将仅比较被单击的顶级子级,而后者将使事件冒泡。
例:

<div id="clickone">ONE<div id="clicktwo">TWO</div></div>


假设这是您的html,用您进行比较的方式,当您单击“ clicktwo”时,您将不会触发“ clickone” onclick。现在,使用.on()将运行事件。

最后,由于您提到您觉得这不是“正确”的方法:
这是附加事件的完美方法。当检查jdocs文档中的.click()事件时,您会发现:“此方法是.on(“ click”,handler)的快捷方式,实际上.on()版本是具有更多功能的版本(像动态元素绑定:))

https://api.jquery.com/click/

08-03 13:51