在两个函数中使用时解除文档就绪冲突中的jquery

时间:2017-10-15 15:03:20

标签: javascript jquery

我有两个帖子和评论页面。回复按钮的功能类似,都在文档就绪事件中使用unbind功能。不知何故,只要一个函数访问不同的类,它们就能工作。当一个人被注释掉时,他们都会工作。我感谢任何帮助和想法。谢谢!

//Replies Posts
$(document).ready(function () {
   $(document).unbind().on("click", ".btnReplySubmit", function() {
        if (!$.trim($(this).closest(".myRepliesForm").find(".textareaReply").val())) {
            alert("Empty Content");
        }
        else {
            $.ajax({
                url: "/Replies/Create/",
                type: "post",
                cache: false,
                data: $(this).closest(".myRepliesForm").serialize(),
                success: function() {
                    $(".reloadComments").load(location.href + " .reloadComments");
                    $(".reloadComments").show("slow");
                }
            });
            $(this).closest(".myRepliesForm").find(".textareaReply").val("");
        }
        return false;
    });
});

//Reply Review
$(document).ready(function () {
    $(document).unbind().on("click", ".btnReplySubmitReview", function () {
        if (!$.trim($(this).closest(".myRepliesFormReview").find(".textareaReplyReview").val())) {
            alert("Empty Content");
        }
        else {
            $.ajax({
                url: "/ReviewReplies/Create/",
                type: "post",
                cache: false,
                data: $(this).closest(".myRepliesFormReview").serialize(),
                success: function () {
                    $(".reloadCommentsReview").load(location.href + " .reloadCommentsReview");
                    $(".reloadCommentsReview").show("slow");
                }
            });
            $(this).closest(".myRepliesFormReview").find(".textareaReplyReview").val("");
        }
        return false;
    });
});

4 个答案:

答案 0 :(得分:1)

如果你在两个事件处理程序上都使用unbind,那么其中一个函数将不可避免地被绑定。您也不需要两个ready调用,因为一个就足够了,最后,您可以按如下方式链接事件处理程序绑定:

$(document).ready(function () {
   $(document).unbind()
   .on("click", ".btnReplySubmit", function() {
        if (!$.trim($(this).closest(".myRepliesForm").find(".textareaReply").val())) {
            // ...
        }
        else {
            // ...
        }
        return false;
    })
    .on("click", ".btnReplySubmitReview", function () {
        if (!$.trim($(this).closest(".myRepliesFormReview").find(".textareaReplyReview").val())) {
            // ...
        }
        else {
            // ...
        }
        return false;
    });
});

答案 1 :(得分:0)

因为unbind将清除所有以前的绑定。

但是..为什么在文档上使用bind / unbind使事情变得复杂,你可以在两个按钮上做一个点击监听器:

$(document).ready(function () {
  $('.btnReplySubmit').click(function(){
    // alert(1);
  });
  $('.btnReplySubmitReview').click(function(){
    // alert(2);
  })
});

答案 2 :(得分:0)

我在这里看到的主要问题是您正在解除附加到$(document)的事件。另外,根据jquery的api,你不应该再使用unbind,因为它已经被弃用了。

相反,您应该像这样构建代码

$(document).ready(function() {
  $('. btnReplySubmit').click(function() {
    // your code here
  })

  $('. btnReplySubmitReview').click(function() {
    // your code here
  })
})

这使您的事件声明更清晰,更容易阅读

答案 3 :(得分:0)

所有答案都是正确的。我可能只是添加.on(events [, selector] [,data], handler)方法中的选择器是事件触发器,但事件绑定到您的文档中。