Smarty包括不添加DOM

时间:2017-10-30 17:26:36

标签: javascript jquery dom smarty

我正在使用一些使用Smarty块模板的软件来包含'另一个模板就像它一样简单;

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

但是,然后我尝试使用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 );
}

元素&#39; testonetwothree&#39;显然被点击了,所以我其实可以这样做;

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

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

1 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,您可以使用动态元素绑定.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()将运行该事件。

最后,既然你提到你觉得它不是“正确”的方式: 这是附加事件的完美方式。当您检查.click()事件的jquery文档时,您可以发现:“此方法是.on(”click“,handler)的快捷方式”实际上.on()版本是有更多的功能(如动态elem绑定:))

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