2012-02-03 28 views
3

我有一个表单,我有一些jQuery代码来覆盖提交过程。但它不工作,没有错误。我简化了示例代码,希望我没有输入错误。jQuery submit() - 覆盖表单动作的事件

有人知道代码有什么问题吗?它没有达到我得到警报的程度()。 click()事件正常工作。

我试着设置一个id到表单。依然没有。

使用jQuery,1.4.2.min.js

<form name="checkout_shipping" action="checkout.php" method="post"> 
    <div class="contentText"> 
     <table border="0" width="100%" cellspacing="0" cellpadding="2"> 
     <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 0); document.checkout_shipping.submit();"> 
      <td width="75%" style="padding-left: 15px;">Flat price</td> 
      <td>$8.00</td> 
      <td align="right"><input type="radio" name="shipping" value="flat_flat" onclick="this.form.submit();" /></td> 
     </tr> 
     <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 1); document.checkout_shipping.submit();"> 
      <td>Pick-up</td> 
      <td>$0.00</td> 
      <td align="right"><input type="radio" name="shipping" value="pickup_pickup" checked="checked" onclick="this.form.submit();" /></td> 
     </tr> 
     </table> 
    </div> 
    </form> 

    <script> 
    $('form[name=checkout_shipping]').submit(function(e) { 
     e.preventDefault(); 
     alert('Houston we have contact!'); 
     $.ajax({ 
     url: '/includes/checkout/payment.php', 
     data: false, // false for testing 
     type: 'POST', 
     cache: false, 
     async: false, 
     dataType: 'html', 
     error: function(jqXHR, textStatus, errorThrown) { 
      // ... 
     }, 
     success: function(data) { 
      // ... 
     } 
     }); 
    }); 
    </script> 

回答

4

你提交表单的方式绕过事件handelers。

相反的:

document.checkout_shipping.submit(); 

使用

$(this).closest('form').submit(); 

http://jsfiddle.net/6uZuS/

全码:

<form name="checkout_shipping" action="checkout.php" method="post"> 
    <div class="contentText"> 
     <table border="0" cellspacing="0" cellpadding="2"> 
      <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 0); $(this).closest('form').submit();"> 
        <td width="75%" style="padding-left: 15px;">Flat price</td> 
        <td>$8.00</td> 
        <td align="right"><input type="radio" name="shipping" value="flat_flat" onclick="$(this).closest('form').submit();" /></td> 
       </tr> 
       <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 1); $(this).closest('form').submit();"> 
        <td>Pick-up</td> 
        <td>$0.00</td> 
        <td align="right"><input type="radio" name="shipping" value="pickup_pickup" checked="checked" onclick="$(this).closest('form').submit();" /></td> 
       </tr> 
      </table> 
     </div> 
</form> 


<script type="text/javascript"> 
     $(document).ready(function(){ 
      $('form[name=checkout_shipping]').submit(function(e) { 
       e.preventDefault(); 
       alert('Got you!'); 
      }); 
     }); 
</script> 
+0

没有错误,没有工作。只需提交表单并重新加载页面。尽管你的例子在链接中做了窍门。 – tim 2012-02-03 00:40:23

+0

我已经从JS Fiddle复制了HTML /脚本,它适用于我。你在JSFiddle上测试过代码吗? – 2012-02-03 00:47:13

+0

我错了,当我复制你的代码并命名一个id时,我有一个错字。它确实有效。谢谢你太多了! WEEE。我永远不会猜到这只是一个事件绕过问题。 – tim 2012-02-03 00:53:46

2

您可以检查here

<form name="checkout_shipping" id="checkout_shipping" action="checkout.php" method="post"> 
    <div class="contentText"> 
     <table border="0" width="100%" cellspacing="0" cellpadding="2"> 
     <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 0);"> 
      <td width="75%" style="padding-left: 15px;">Flat price</td> 
      <td>$8.00</td> 
      <td align="right"><input type="radio" name="shipping" value="flat_flat" onclick="$(this).parents('form').submit();" /></td> 
     </tr> 
     <tr onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="selectRowEffect(this, 1);"> 
      <td>Pick-up</td> 
      <td>$0.00</td> 
      <td align="right"><input type="radio" name="shipping" value="pickup_pickup" checked="checked" onclick="$(this).parents('form').submit();" /></td> 
     </tr> 
     </table> 
    </div> 
    </form> 
<script> 
$(document).ready(function(){ 
$('#checkout_shipping').submit(function(e) { 
     e.preventDefault(); 
     alert('Houston we have contact!'); 
}); 
}) 
</script> 
+0

没有错误,但没有奏效。一个常规的形式行动是我得到的。没有警报,没有ajax。 – tim 2012-02-03 00:35:56

+0

您是否检查测试链接? http://jsfiddle.net/y6z3j/1/ – 2012-02-03 00:39:24

+0

您必须将您的onclick事件更改为:$(this).parents('form')。submit();'或$(this).closest(' ')。submit();' – 2012-02-03 00:40:03