我目前正在使用
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读入响应,上面的响应将执行dm.commander中的alert()函数
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 prepends.
虽然我不能特意委托#messages,因为将来其他功能可以附加说#content.
无论如何都要将instantclick绑定到动态创建的链接,如上所述.
是的,我已经研究过,找不到有效的答案.
解决方法
您只是在页面加载时初始化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',function(e) { console.log('clicked'); e.preventDefault(); }); InstantClick.init(100); },
我承认这感觉有点脏.只是再次初始化它,但我找不到任何关于某种破坏或重新启动功能的文档.所以这是我最好的猜测.
$(document).on('click',function(e) { console.log('clicked'); e.preventDefault(); }); InstantClick.init(100);