2013-06-12 40 views
2

你好,我嘗試發送ID在這裏的動態的方式是代碼:選擇在jQuery的

function formsub(val){ 
    val2 = "form#" + val.toString() + " :input"; 
    val3 = "form#formmain :input"; 
    $(val3).each(function() { 
     var input = $(this); 
     alert($(this).val()); 
    }); 
} 

當有人點擊的形式提交按鈕,這將調用formsub但我得到的問題,錯誤:

Uncaught exception: Syntax error , unrecognized expression '' 

我嘗試使用val3和它的正常工作,但是當我用它val2給我的錯誤,但它們是相同的值。

<form id='formmain' method='post' onsubmit='formsub(this.id)'> 
    <label>Name</label> 
    <input type='textbox' required /> 
    <span style='color:red;'>*</span> 
    <br/> 
    <label>Male</label> 
    <input type='radio' required /> 
    <span style='color:red;'>*</span> 
    <br/> 
    <label>Female</label> 
    <input type='radio' required /> 
    <span style='color:red;'>*</span> 
    <br/> 
    <input type='submit' /> 
    <br/> 
</form> 

上面的代碼是用於表單的。

在此先感謝

+3

他們*不*相同。 'val2'是'form#formmain:input',但'val3'是'form#formmain:input'。注意冒號的位置。 –

+0

@FelixKling如果您將它作爲答案而不是評論,它會更容易閱讀。 –

+1

@dystroy:是的,但我投票結束這個問題,我不傾向於在這種情況下回答。我現在做了,但提出了一種替代解決方案。 –

回答

3

正如已經被別人和我提到,結腸的位置是在這兩個字符串不同,這就是爲什麼你在一種情況下得到的錯誤。

但是,如果直接使用DOM元素,則可以避免整個字符串連接。

HTML:

<form id='formmain' method='post' onsubmit='formsub(this)'> 

JS:

function formsub(ele){ 
    $(ele).find(':input').each(function() { 
     // ... 
    }); 
} 

更妙的是,如果使用jQuery的事件處理程序綁定,例如:

$('form').on('submit', formsub); 
// or $('#formmain').on('submit', formsub); 

在事件處理程序中,this將引用表單元素。詳細瞭解事件處理:http://learn.jquery.com/events/

1

嘗試

$("form#" + val.toString() + ":input").each(function(){ 
var input = $(this); 
alert(input.val()); 
}); 
+0

對不起,但ID已通過,不僅爲formmain我希望它是動態的 – amrswalha

+0

附加VAL代替forminn.Ok.updated..please檢查它。 –

+0

現在有錯誤。 –

2

替換此:

val2 = "form#" + val.toString() + ": input"; // form#formmain: input 

與此:

val2 = "form#" + val.toString() + " :input"; // form#formmain :input 

另外一個建議,因爲ID應該是唯一的,你可以只使用ID而不是form#ID,如:

val2 = "#" + val.toString() + " :input";  // #formmain :input 

此外,您還可以修改,如JS:

function formsub(val) { 
    val2 = "#" + val.toString() + " :input"; 
    val3 = "#formmain :input"; 
    $(val2).each(function() { 
     alert(this.value); 
    }); 
} 
2

嘗試使用

val2="form#"+val+" :input"; 

讓我知道這是否有用?

2

正如我分析的代碼,我看到有VAL2和VAL3之間微小的差別:

這個替換您VAL2:

val2="form#"+val.toString()+" :input"; 

如您忘記了空間。

2

:input之間沒有足夠的空間應該是:input

function formsub(val){ 
    val2="form#" + val.toString() + ":input"; // no space between : and input 
    val3="form#formmain :input"; 
    $(val3).each(function(){ 
     var input = $(this);alert($(this).val()); 
    }); 
}