2011-09-14 63 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