jQuery Undelegate来自函数内部

时间:2012-10-26 19:00:13

标签: javascript jquery

如何取消#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会提交给不同的数据串。

2 个答案:

答案 0 :(得分:1)

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

记录在案Here

基本上......

$(".agent img").unbind("click");

答案 1 :(得分:1)

根据jQuery doc for .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();
        });
    });