2010-02-08 19 views
0

這裏的處理:爲了構建一系列正確的參數,我試圖循環所有輸入包含在ajax內置形成; 代碼到這裏還沒有結束,但我想你會明白:棘手的小jQuery選擇器之一:循環所有輸入,並只排除未選中的單選按鈕

$("#formulaireUploadFichier").live('submit',function(e){ 
    var fm = $(this); 
    var fld = []; 
    $('input',fm).not('[type=submit]').each(function(){ 
     if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")) 
     var name= $(this).attr("name"); 
     var val= $(this).val(); 
     fld.push(name+'='+val); 
    }); 
    //construct url (note : should really be encoded!)... 
    var url = fm.attr('action')+'?'+fld.join('&'); 
    //open shadowbox... 
    Shadowbox.open({ 
     player:"html", 
     content:url, 
     width:800, 
     height:800 
    }); 
    //prevent form submission... 
    e.preventDefault(); 
}); 

發癢一部分來自第5行,我試圖寫一個正確的選擇的jQuery通過對非檢查/選擇單選按鈕。 我知道我離它不遠,但是我越來越亂了,所以任何幫助清除這個幫助將不勝感激。

回答

3

既然你在輸入元素的循環是已經更換if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")),無需啓動另一個。只需在每個項目上測試適當的過濾器。

if($(this).is(":radio:checked,:not(:radio)")) { 
     var name= $(this).attr("name"); 
     var val= $(this).val(); 
     fld.push(name+'='+val); 
} 

jQuery's is()函數可以讓你比較一個元素和你作爲參數傳遞的選擇器。

+0

我剛剛開始使用2天前的jQuery,所以我可能會錯,但我相信這會選中所有未檢查的單選按鈕。我認爲用戶打算選擇除未檢查的單選按鈕外的所有輸入。 – Justen 2010-02-08 19:10:09

+0

用戶已在迭代輸入。 jQuery的is()函數可以讓你測試一個元素,看它是否與給定的選擇器相匹配。它返回'true'或'false'。 – user113716 2010-02-08 19:13:31

+0

啊好吧,現在看它,我明白了。選中選中的單選按鈕,然後選擇無單選按鈕。 – Justen 2010-02-08 19:35:44

0

你搞砸了近東西$(this"[type

編輯:

var inps=$('input'); 
var whatYouWant = inps.filter('[type!=radio]').add(inps.filter('[type=radio]:checked')); 

這樣它應該做的事你想

+0

這不起作用。它返回未檢查的收音機集合。那(根據他的例子)是他想要的。 – user113716 2010-02-08 19:18:15

+0

好吧,現在我看到什麼是壞的,但下次不會結束你的負面評論「這就是他想要的」;) 我正在修復編輯中的答案 – naugtur 2010-02-08 22:59:04

+0

糟糕。想說這不是他想要的。感謝您的更正。希望我不是太消極。給你一個+1,讓我直挺挺! – user113716 2010-02-08 23:55:52

-1

你有什麼期望resutls在這裏?

$('input',fm).not('[type=submit]').each(function(){ 
    if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")) 
    var name= $(this).attr("name"); 
    var val= $(this).val(); 
    fld.push(name+'='+val); 
    }); 

我在這裏看到的是,如果它檢查是否無線電你要低於火的條件。如果您錯過了想要包圍代碼的想法,您只需在滿足條件時設置var名稱即可。你的意思是讓它運行所有的代碼?喜歡這個?

$('input',fm).not('[type=submit]').each(function(){ 
if ($(this"[type=radio]:checked"||$(this).not("[type=radio]")){ 
var name= $(this).attr("name"); 
var val= $(this).val(); 
fld.push(name+'='+val); 
} 

}); 
+0

有趣的是這被折服了,但代碼顯然不會根據原始海報發佈的內容設置該名稱變量。 – 2010-02-08 19:29:43

+0

朝向誰指導?你評論了你自己的答案。 – user113716 2010-02-08 19:32:25

-2

我建議由if($(this).attr('type') !== 'radio' || $(this).val()=='on')

0

你到底要選擇:

  • 剛纔檢查單選按鈕,或
  • 所有檢查單選按鈕和複選框?

代碼只是檢查單選按鈕:

if($(this).is(":radio:checked")) { 

代碼檢查所有輸入(複選框和單選按鈕):

if($(this).is(":radio:checked, :not(:radio):checked")) { 

我希望這是你追求的。

相關問題