ajax调用后点击使用不起作用

sam*_*muk 2 html javascript css jquery bootswatch

 $(document).ready(function () {
var user = 1;
 $("a.like").on("click", function () {
            var article = $(this).attr('data-article');
            $.ajax({
                type: "POST",
                url: "WebService.asmx/Like",
                data: "{ 'user': '" + user + "', 'article': '" + article + "' }",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if(msg.d ==  1)
                    {
                        $(".like[data-article='" + article + "']").fadeOut(700).addClass('unlike').removeClass('like').stop().text('Unlike').fadeIn(700);
                    }
                },
                failure: function (msg) {
                    alert(msg.d);
                }
            });
        });

$("a.unlike").on("click", function () {
            var article = $(this).attr('data-article');
            $.ajax({
                type: "POST",
                url: "WebService.asmx/Unlike",
                data: "{ 'user': '" + user + "', 'article': '" + article + "' }",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    if(msg.d ==  1)
                    {
                        $(".unlike[data-article='" + article + "']").fadeOut(700).addClass('like').removeClass('unlike').stop().text('Like').fadeIn(700);
                    }

                },
                failure: function (msg) {
                    alert(msg.d);
                }
            });
        });
});
Run Code Online (Sandbox Code Playgroud)

当我点击类的链接时它工作正常,当我点击类不同的链接时也一样.但是,当我点击两次相同的链接时,它无法正常工作!当我在互联网上搜索时,我发现我必须使用live而不是click,但是在1.8版本上不赞成live.我怎样才能多次发生火灾?

Kev*_*her 10

用途jQuery.on():

$( document ).on( 'click', 'a.like', function () {
    // Do click stuff here
} );
Run Code Online (Sandbox Code Playgroud)

http://api.jquery.com/on/

您需要绑定on到始终存在的元素.(文件或一些主要的包装div).使用on动态元素将无法正常工作.

  • 这里神奇的词是_Delegation_,google它并且惊讶:P (2认同)

Joh*_*han 5

如果你想使用on而不是live你需要写类似的东西

$('#container').on('click', '.a.unlike', function () {
Run Code Online (Sandbox Code Playgroud)

以来

$("a.like").on("click", function () {
Run Code Online (Sandbox Code Playgroud)

就像bind()它被弃用之前一样工作.

如果你想要on()live()你在第一个例子中那样需要传递3个参数.

.on()方法将事件处理程序附加到jQuery对象中当前选定的元素集.从jQuery 1.7开始,.on()方法提供了附加事件处理程序所需的所有功能.对于从旧的jQuery事件方法转换帮助,请参阅.bind() ,.delegate().live() .要删除与.on()绑定的事件,请参阅.off().要附加仅运行一次然后自行删除的事件,请参阅.one()