2011-09-14 84 views
1

我無法讓我的表單提交工作。我正在使用preventDefault 以動態更改表單的動作屬性,但是當我點擊 按鈕時,它根本沒有做任何事情,而且我爲什麼可能會使用這個按鈕。任何人都可以請看看並指出我出錯的地方嗎?表單提交與jQuery不工作

下面的代碼:

JS:

  $j('select[id=subtype]').live('change',function(){     
      var stype = $j(this).val(); 
    var styp_pos = $j.inArray(stype, styp_id_arr); 
    var styp_url = styp_url_arr[styp_pos]; 
    $j('input[id=styp_url]').val(styp_url); 
     }); 


      $j('button[id=frm_submit]').click(function(event){ 
    event.preventDefault(); 
    var full_url = typ_url + '-' + styp_url + '.html'; 
    alert(full_url); 
    $j('form[id=type_sel_form]').attr("action", full_url); 
    $j('form[id=type_sel_form]').submit(); 

}); 

HTML:

<form id="type_sel_form" name="type_sel" class="stsel_form" action="subtype.php" method="post"> 
... 
<button id="frm_submit" type="submit" class="st_button">View</button> 
</form> 

編輯:具有在第一個版本糾正一個錯字,並通過Firebug的運行代碼時後,我收到一條錯誤消息,指出typ_url沒有定義。我在提交之前執行的操作(JS代碼的第一部分)中定義了它。這是否是點擊按鈕時沒有任何反應的原因?

非常感謝提前

回答

2

我假設您已將別名$改爲$j。在這兩條線

$j('#type_sel_form').attr("action", full_url); 
$j('#type_sel_form').submit(); 

也正好提供id$('#id')足夠刪除$j.

完整示例:

$j('#frm_submit').click(function(event){ 
    event.preventDefault(); 
    var full_url = typ_url + '-' + styp_url + '.html'; 
    alert(full_url); 
    $j('#type_sel_form').attr("action", full_url); 
    $j('#type_sel_form').submit(); 
}); 
+0

感謝您發現錯字。我已經糾正它並相應地編輯了問題。 – Argoron

+0

在第一個函數內定義的變量在第二個函數中不可見。分享您在jsfiddle.net上試圖做的事例。否則,你可以通過將它們移到第一個函數之上來使變量全局。但這可能是一種代碼味道。 –

+0

我發現解決方案是通過查看具有可變定義問題的其他帖子:我將「文檔準備好」之外的變量聲明爲「= null」,然後再次如上所述進行聲明,現在它可以工作。感謝您讓我走上正軌! – Argoron

0

變化:

$j.('form[id=type_sel_form]').attr("action", full_url); 
$j.('form[id=type_sel_form]').submit(); 

分爲:

$j('form[id=type_sel_form]').attr("action", full_url); 
$j('form[id=type_sel_form]').submit(); 

有額外的點。

+0

錯字校正,謝謝。 – Argoron