ajax click多次触发

时间:2017-12-26 12:19:47

标签: javascript php jquery ajax laravel

我有一个包含2个按钮save & continuesave and exit的表单。我也给了这些按钮2个ID,分别是save_contsave_exit

第一个按钮工作正常但是当我点击第二个按钮时,第一个按钮的ajax也会激活,因此我无法重定向我的网址并重新加载页面。

在demo.discount.blade.php中:

//Save and Continue
$('#save_cont').click(function() {
    $.ajax({
        url: 'demo_save_data',
        type: 'POST',
        data: $("#add_seasonal_discount").serialize(),
        success: function(result) {
            if (result.success > 0) {
                alert("Save and Continue");
                window.location.reload();
            }

        }
    });

});

//Save and Exit
$('#save_exit').click(function() {

    $.ajax({
        url: 'demo_save_data',
        type: 'POST',
        data: $("#add_seasonal_discount").serialize(),
        success: function(result) {
            if (result.success > 0) {
                alert("Save and Exit");
                window.location = 'demo_seasonal_discount_newpage_report.php';
            }

        }
    });

});
$("#save_cont").unbind("click");

按钮的HTML:

<div class="form-group col-md-12 required">
    <button title="Save" id="save_cont" class="scl_issave a-link btn scl-btn-clasic scl-btn-margin-v" type="button">Save & Continue</button>
    <button title="Save" id="save_exit" class="scl_issave_exit a-link btn scl-btn-clasic scl-btn-margin-v" type="button">Save & Exit</button>
</div>  

在我的控制器内:

public function demo_save_data() {
    DB::table('demo_table') ->
        insert([
            'invoice_type' => Input::get('invoice_type'),
            'sales_channel' => Input::get('pricing_group'),
            'material' => Input::get('matnr'),
            'from_date' => Input::get('fromdt'),
            'to_date' => Input::get('todt'),
            'discount' => Input::get('discount'),
            'bukrs' => Session::get('company')
        ]);

    return array('success' => 1);
}

编辑:最后添加$("#save_cont").unbind("click");。现在第二个按钮save_exit工作正常,但第一个按钮save_cont根本不起作用。

1 个答案:

答案 0 :(得分:0)

我无法一眼就看出为什么你描述的行为会发生。您可以将它们合并为一个函数并消除问题,因为您将相同的数据发送到同一个地方,例如:

 function thingClicked(theThing){
   $.ajax({
     url:'demo_save_data',
     type:'POST',
     data:$("#add_seasonal_discount").serialize(),
     success:function(result){
       if(result.success>0){
         if(theThing == 'save_cont'){
           alert("Save and Continue");
           window.location.reload();
         }else if(theThing == 'save_exit'){
           alert("Save and Exit");
           window.location='demo_seasonal_discount_newpage_report.php';
         }
       }  
     });
  }

然后当然你可以随意调用它。你使用的.click()绑定应该没问题......

$("#save_cont").click(thingClicked(this.id));

$("#save_exit").click(thingClicked(this.id));

没有什么真正改变,但两者之间的唯一区别是返回,所以也可以将条件逻辑放在那里,并消除任何歧义。