0
$('.add_instruction_btn').click(function(e){
                    e.preventDefault();
                    var ins_content=$('#add_instructions').val();
                    var id=$('.useri').val();
                    if(ins_content!="")
                    {
                        //write new instructions to database
                        var id=$('.useri').val();
                        var data="job_id="+job_idx+"&ins="+ins_content+"&client_id="+id+"&key=2";
                        $.ajax({
                            type:"POST",
                            url:"admin_includes/get_instructions.php",
                            data:data,
                            success:function(html2){
                                alert(html2);
                            }
                        });//end ajax

                    }
                    return false;
                });

每次单击按钮时,我似乎都尝试过阻止事件翻倍。该代码最初位于另一个打开“弹出式”样式框的函数内,但即使我将其移到函数外,它似乎仍然冒泡。

按照要求:-

$(document).on('click', '.bottom_links .lister a', function(e){
        //e.preventDefault();
        //e.stopPropagation();
        $('.ind_ins').text("");
        var ident=$(this).data('ref1');
        if(ident==1){
            var job_idx=$(this).data('job_id');
            var cl_name=$(this).data('cl_name');
            var icon_stat=$(this).data('img_id');
            var id=$('.useri').val();
            if(icon_stat=="1")
            {
                $('.opaque_scr,.instruction_popup').css('visibility', 'visible');
                $('.instruction_popup h2').html("Add Instructions for Appointment ID: "+job_idx);
                $('.client_name').html("<strong>Client Name: </strong>"+cl_name);
                //get original instructions
                var get_job="job_id="+job_idx+"&key=1";
                $.ajax({
                    type:"POST",
                    url:"admin_includes/get_instructions.php",
                    data:get_job,
                    success:function(html){
                        var split_data=html.split("^");
                        var split_data_count=split_data.length-1;
                        var ins_tb="<table width='100%'>"
                        for(var xs=0;xs<split_data_count;xs++)
                        {

                            var ind=split_data[xs].split("|");
                            var ind_count=ind.length-1;
                            for(var xx=0;xx<ind_count;xx++)
                            {
                                ins_tb+="<tr><td width='75%'>"+ind[0]+"</td><td>"+ind[1]+"</td></tr>";
                            }

                        }
                        ins_tb+="</table>";

                        $(ins_tb).appendTo('.ind_ins');
                    }

                })//end ajax

                $('.add_instruction_btn').click(function(e){
                    e.preventDefault();
                    e.stopPropagation();
                    var ins_content=$('#add_instructions').val();
                    var id=$('.useri').val();
                    if(ins_content!="")
                    {
                        //write new instructions to database
                        var id=$('.useri').val();
                        var data="job_id="+job_idx+"&ins="+ins_content+"&client_id="+id+"&key=2";
                        $.ajax({
                            type:"POST",
                            url:"admin_includes/get_instructions.php",
                            data:data,
                            success:function(html2){
                                alert(html2);
                            }
                        });//end ajax

                    }
                    return false;
                });


            }

        }
4

2 回答 2

2

问题是您不止一次连接事件处理程序。每次单击元素匹配时'.bottom_links .lister a',只要各种条件都正确,您就重新运行此代码:

$('.add_instruction_btn').click(function(e){
    // ....
});

每次运行该代码时,都会连接处理程序的一个新副本。

如果匹配的元素集'.add_instruction_btn'是固定的,只需将该代码移出元素的click处理程序即可'.bottom_links .lister a'

如果匹配的元素集发生'.add_instruction_btn'变化,您仍然希望将代码移到元素click处理程序之外'.bottom_links .lister a',但您可能希望它也使用事件委托,就像使用事件委托一样'.bottom_links .lister a'

关于事件委托的说明:您正在“扎根”您的事件委托document,这真的非常非常高。最好将委托放在最近的容器中,以便您正在监视的元素。显然,如果document 最近的容器,那么你就在那里,但通常你可以使用更远一些的东西来代替,同时仍然可以获得委托的好处。

于 2012-07-11T14:15:09.130 回答
0

尝试e.stopPropagation

         $('.add_instruction_btn').click(function(e){
                e.preventDefault();
                e.stopPropagation(); 
                ....
于 2012-07-11T13:56:11.730 回答