我当前正在使用http://instantclick.io,但是该插件未绑定(bind)我动态创建的链接。

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将div附加到#messages

绑定(bind)的jQuery是
$(document).one('click', 'a', function(e) {
        console.log('clicked');
        e.preventDefault();
    })
    InstantClick.init(100);

上面的代码适用于页面上已有的普通链接,但是不适用于PHP生成的链接和jQuery附加的链接。

尽管由于将来的其他功能,我无法具体委托(delegate)给#messages,但可以追加说#content

无论如何,有没有将Instantclick绑定(bind)到动态创建的链接(例如上述链接)。

是的,我已经研究过,找不到有效的答案。

最佳答案

您仅初始化InstantClick on页面加载。然后,它将自身应用于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);
},

我必须承认这有点脏。只是再次对其进行初始化,但我找不到任何有关某种destroy或reinit函数的文档。所以这是我最好的猜测。

原始的底部代码已修复:
$(document).on('click', 'a', function(e) {
    console.log('clicked');
    e.preventDefault();
});
InstantClick.init(100);

08-25 16:30