2012-04-01 43 views
1

所以我有這樣的:將變量傳遞給JQuery提交函數?

$('#id').submit(function(e){ 
    e.preventDefault(); 
    etc etc 

我希望能有這樣的:

$('#id' + variable).submit(function(e){ 
    e.preventDefault(); 
    etc etc 

我不知道我應該做的事去了一番。其原因是頁面上有許多類似的表單動態生成。

我試圖這樣做的,我猜這只是做了一件可怕的事情,但它是我所能想到的嘗試,因爲我不是很好用jQuery:

但是,這導致表格要多次提交。

CNC中,以響應請求:

$.ajax({ 
    type: "POST", 
    url: "process.php", 
    data: dataString, 
    success: function(data) { 

      var responseData = jQuery.parseJSON(data), 
      etc etc do some stuff like show a message (all that works) 
+1

你可以發佈你如何提交你的表單提交()函數? – 2012-04-01 06:56:52

+0

什麼應該包含你的變量?如果它是另一個選擇器,請不要忘記使用逗號=> $('#id,'+ variable) – 2012-04-01 06:57:02

回答

2

如果你是生產用不同的ID的動態多種形式,它可能會有利,如果他們都使用相同的class="preventSubmit",看起來像你的代碼:

$('.preventSubmit').submit(function(e){ 
    var currentThis = this; 
    alert(this.id); 
    e.preventDefault(); // breaks this 
    alert(currentThis.id); 
    etc etc 
+0

然後,我應該在其中創建一個函數,以便可以傳遞該變量?我需要我的發佈數據的變量。 – qitch 2012-04-01 07:03:34

+0

已更新,提供'preventDefault()'的表單ID。 – 2012-04-01 07:05:43

+0

好主意。另外值得一提的是,你總是可以爲一個元素添加多個類,例如:

2012-04-01 07:07:17

1

如果你想避免提交本身,有兩種做法:

1)使用輸入類型=「按鈕」,並附對於點擊事件處理程序:

<input type="button" id="submit_btn" value="Submit" /> 

// (In Javascript): 

$("#submit_btn").click(function() { 

}); 

2)要停止提交,使用返回false:

$("#id" + variable).submit(function() { 
    return false; 
}); 
0

如果你有這個html

<div id="wrap"> 
<form id="id35"> 
    <input type="submit" value="submit" /> 
</form> 
</div> 

js

var threeFive = 35; 
$("#id"+threeFive).submit(function(e){ 
    e.preventDefault; 
    alert("hi"); 
}); 

它的作品! ...... ,......如果你有這html

<div id="wrap"> 

</div> 

,以後你動態地追加form元素的容器,比方說像

樣品js函數

function addMe(){ 
$('#wrap').append('<form id="id35"><input type="submit" value="submit" /></form>') 
} 

加樣按鈕

<a class="addMe" href="javascript:addMe();">add form</a> 

然後,當您提交form時,示例警報不再起作用。

您需要修改腳本以支持使用.on()方法(和jQuery v1.7)動態添加form。x)的目標父容器像

var threeFive = 35; 
$("#wrap").on("submit","#id"+threeFive, function(e){ 
e.preventDefault; 
alert("hi"); 
}); 

那麼它會工作

+0

感謝您的反對,但如果您發表評論並首先證明我錯了,那將會很好。 – JFK 2012-04-01 08:03:06

1

試試這個。

$('form').on('submit', function(e){ 
    var variable = $(this).attr('id'); 
    e.preventDefault(); 
}); 
+0

真的很抱歉,但這不會阻止一個動態添加的表單 – JFK 2012-04-01 07:51:26

+0

感謝您的反對,但如果您發表評論並首先證明我錯了(如果可以) – JFK 2012-04-01 08:05:31

+0

否則不會。但是這就是他的代碼,所以我認爲這是他想要的。他的問題是關於通過元素的ID傳遞變量。這是你如何做到的。 :)另外,我沒有讓你失望。是什麼讓你這麼說? – rgin 2012-04-01 09:03:23

0

如果你不得不在單個頁面中處理很多表單,你可能想利用冒泡。

<div class="container-for-all-forms"> 
<form id="..." class="..."> ..... <input type="submit" /> </form> 
<form id="..." class="..."> ..... <input type="submit" /> </form> 
<form id="..." class="..."> ..... <input type="submit" /> </form> 
. 
. 
</div> 

JS位可能是

$('#container-for-all-forms').bind('click.formProcessor', function(event){ 
    var $clicked = $(event.target); 
    if($clicked.is(':submit')){ 
    event.preventDefault(); 
    console.log($clicked.parents('form').attr('id')); 

    /* at this point you can get all id names from php (or template language), bind js variables and match. like: 
     var idNames = ['<?...?>','<?...?>'] 
    */ 

    } 
}); 

這將只綁定一個事件到容器元素,當點擊該容器時,您可以運行各種檢查。