2012-12-13 49 views
3

我试图为我的Magento商店之一运行以下jquery ajaxSubmit。我使用ajaxSubmit,因为我也有2个文件要从表单上传(也就是说我需要$_FILE中的数据)。但是当我执行ajaxSubmit时,它也会使用正常的表单提交,它会刷新页面并将我带到下一页,而不是留在同一页面上,其中有一个弹出框,其中包含更多内容。我有return false;以防止这种情况,但它失败。 的提交代码:jquery ajaxSubmit也提交了常规表格

$('#quickbuyform').submit(function(){ 

    // No Accessories: normal submit 
    if ($('#accessories ul li').size()==0) { 
     return true; 
    } 

    strName = "<?php echo $_product->getName() ?>"; 

    // loading message 
    $('#pop_accessories_area_message').html("We are adding '"+strName+"' into your shopping cart ..."); 
    // Pop with loading 
    popAccessories(); 

    // loading icon 
    //var dataString = $('#quickbuyform').serialize(); 
    $.ajaxSubmit({ 
      type: "POST", 
      url: $('#quickbuyform').attr('action'), 
      data: dataString, 
      beforeSubmit: showRequest, 
      success: function() { 
      // display cart link: 
      $('#pop_accessories_area_message').html(strName+" was added to <a href='<?php echo $this->getUrl('checkout/cart') ?>'>your shopping cart</a>."); 
      $('.pop_accessories_area_button').show(); 
      //window.location = '<?php //echo $this->getUrl('checkout/cart') ?>'; 
      } 
     }); 
    return false; 
}); 

因此,这是我现在有e.preventDefault(),但现在不提交任何东西。仅仅停留在('#quickbuyform').ajaxSubmit

$('#quickbuyform').submit(function (e){ 
    e.preventDefault(); 
    // No Accessories: normal submit 
    if ($('#accessories ul li').size()==0) { 
     return true; 
    } 

    strName = "<?php echo $_product->getName() ?>"; 

    // loading message 
    $('#pop_accessories_area_message').html("We are adding '"+strName+"' into your shopping cart ..."); 
    // Pop with loading 
    popAccessories(); 

    $('#quickbuyform').ajaxSubmit({ 
      type: "POST", 
      url: $('#quickbuyform').attr('action'), 
      data: dataString, 
      success: function() { 
      // display cart link: 
      $('#pop_accessories_area_message').html(strName+" was added to <a href='<?php echo $this->getUrl('checkout/cart') ?>'>your shopping cart</a>."); 
      $('.pop_accessories_area_button').show(); 
      //window.location = '<?php echo $this->getUrl('checkout/cart') ?>'; 
      } 
     }); 
    return false; 
}); 
+0

如果表单的action属性中包含正确的url,则不需要指定url选项,默认情况下,ajaxSubmit将使用此选项。 –

回答

3

您可以停止正常的形式,通过调用事件对象的preventDefault方法提交。

$('#quickbuyform').submit(function (e) { 
    e.preventDefault(); 
    ... 
}); 
+0

我试过e.preventDefault();但是我把它停在函数顶部的语句停止提交表单,如果我把它放在返回false之前;它会执行正常的提交。任何想法在哪里把这个声明.. ?? – Thanu

+0

你应该在顶部添加它。 ajaxSubmit方法仍应像往常一样提交表单。 – Stanley

+0

是的,我在顶部,但之后,ajaxSubmit没有被调用,如果我删除它,ajaxSubmit将调用,但作为一个正常提交:( – Thanu

0

尝试使用$就代替,或e.preventDefault();如上建议:

$.ajax({ 
      type: "POST", 
      url: $('#quickbuyform').attr('action'), 
      data: dataString, 
      beforeSubmit: showRequest, 
      success: function() { 
      // display cart link: 
      $('#pop_accessories_area_message').html(strName+" was added to <a href='<?php echo $this->getUrl('checkout/cart') ?>'>your shopping cart</a>."); 
      $('.pop_accessories_area_button').show(); 
      //window.location = '<?php //echo $this->getUrl('checkout/cart') ?>'; 
      } 
}); 
+0

$ .ajax不会将文件发布到$ _FILE数组中...所以$ ajax不在我估计 – Thanu

0

你应该尝试这样的事情 -

$("#quickbuyform").submit(function(e){ 
    e.preventDefault(); 
    });​ 

这将防止您的jQuery的默认行为事件。