我目前正在使用http://instantclick.io,但该插件并未绑定我动态创建的链接。
PHP响应
$json['alert'] = array(
'type' => 'success',
'content' => 'Success! Your new thread has been posted, you can visit it <a href="' . site_url_in . 'forums/thread/' . $id . '">here</a>'
);
jQuery表单处理程序
$.post(url, form, function(data){
//Lets do awesomeness
console.log('Data: ' + data);
console.log('Form: ' + form);
dm.commander.init(data);
});
Commander.init读取响应,上面的响应将执行alert()
dm.commander
函数
alert: function(message)
{
$("#messages").empty();
$("#messages").prepend('<div class="alert alert-'+message['type']+'">'+message['content']+'</div>');
// this.scrollTo('messages');
},
正如您所看到的,PHP响应会发送一个带有链接的警报。然后表单处理它并返回alert(),它将div添加到#messages
绑定的jQuery是
$(document).one('click', 'a', function(e) {
console.log('clicked');
e.preventDefault();
})
InstantClick.init(100);
以上内容适用于页面上已有的普通链接,但它不适用于PHP生成的链接和jQuery前缀。
虽然由于未来的其他功能我无法专门委托给#messages
,但可以附加说#content
。
无论如何都要将instantclick绑定到动态创建的链接上,如上所述。
是的,我已经研究过,无法找到有效的答案。
答案 0 :(得分:4)
您只是在页面加载时初始化InstantClick。然后它将自己应用于DOM树中当前的所有链接。然后,当您向DOM树添加新链接时,这些链接不会自动添加到InstantClick。尝试在AJAX警报功能结束时初始化InstantClick。
在阅读NoGray的回答后,我认为你确实希望从.one更改为.on。此外,这也需要重新启动:
alert: function(message)
{
$("#messages").empty();
$("#messages").prepend('<div class="alert alert-'+message['type']+'">'+message['content']+'</div>');
// this.scrollTo('messages');
$(document).unbind('click').on('click', 'a', function(e) {
console.log('clicked');
e.preventDefault();
});
InstantClick.init(100);
},
我承认这感觉有点脏。只是再次初始化它,但我找不到任何关于某种破坏或重新启动功能的文档。所以这是我最好的猜测。
原始底部代码已修复:
$(document).on('click', 'a', function(e) {
console.log('clicked');
e.preventDefault();
});
InstantClick.init(100);
答案 1 :(得分:2)
实际上,对于动态创建的DOM元素,您需要使用 on 而不是一个。
$(document).off("click",'a').on('click', 'a', function(e) {
console.log('clicked');
e.preventDefault();
});
感谢