我正在使用一些使用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/