0

如何取消对#submit 点击事件的委托?

$(document).ready(function(){
            $(".agent img").click(function(){
                $(".agent-form").remove();
                var agentid = $(this).attr("alt"),
                    response = "<form method='post' action='' class='agent-form'><textarea placeholder='Your Comment' name='comment' id='comment'></textarea><input type='button' value='submit' id='submit' /></form>";
                $(response).hide().appendTo(this.parentNode).fadeIn();
                $(".agent").delegate("#submit","click",function(){
                    var message = $("#comment").val();
                    message = escape(message);
                    var dataString = "agent="+agentid+"&message="+message;
                    $.ajax({
                        type: "POST",
                        url: "includes/newcomment.asp",
                        data: dataString,
                        success: function(){
                            console.log(dataString);
                        }
                    });
                });
            });
        });

我想取消所有在以前的 .agent img 点击上创建的 #submit 点击事件。问题是,如果用户单击代理 img 然后决定单击另一个 img,则 ajax 提交到不同的数据字符串。

4

2 回答 2

1

您可以使用 jQuery 的 .unbind() 方法。

它记录在这里

基本上..

$(".agent img").unbind("click");
于 2012-10-26T19:02:34.357 回答
1

根据jQuery 文档.delegate(),您可以使用它.undelegate()来删除事件处理程序。

您没有向我们展示您的 HTML,但这听起来更像是您应该只拥有一个始终存在的委托事件处理程序,而不是创建一个、删除一个、创建另一个等...您可以将 agentid 存储在表单元素中当您创建它然后像这样在提交处理程序上检索它时。

 $(document).ready(function(){

        $(document).delegate("#submit", "click", function() {
            var message = $("#comment").val();
            message = escape(message);
            // get agentid for this form
            var agentid = $(this).closest("form").data("agentid");
            var dataString = "agent="+agentid+"&message="+message;
            $.ajax({
                type: "POST",
                url: "includes/newcomment.asp",
                data: dataString,
                success: function(){
                    console.log(dataString);
                }
            });
        });

        $(".agent img").click(function(){
            $(".agent-form").remove();
            var agentid = $(this).attr("alt"),
            // build form HTML (embed agentid into it for later retrieval)
            var response = "<form method='post' action='' class='agent-form' data-agentid='" + agendid + "'><textarea placeholder='Your Comment' name='comment' id='comment'></textarea><input type='button' value='submit' id='submit' /></form>";
            $(response).hide().appendTo(this.parentNode).fadeIn();
        });
    });
于 2012-10-26T19:03:44.743 回答