2008-11-21 125 views
0

我正在寫一個分爲字段集的HTML表單,我需要從函數中的特定fiedset獲取表單字段。
目前是這樣的:如何從特定字段集中獲取表單字段?

function conta(Fieldset){ 
    var Inputs = Fieldset.getElementsByTagName("input"); 
    var Selects = Fieldset.getElementsByTagName("select"); 
    /* Doing the stuff I need to do in two iterations, one for each field type */ 
} 

但誰知道將來可以持有,如果表單獲得了一些新的字段類型(收音機,複選框),這可能成爲可怕的十個分量來。
我知道form元素有elements屬性返回所有的表單字段,我希望我可以使用類似的東西。
(我知道我仍然需要在迭代中區分一組條件中的字段類型,但我認爲它會更快,更容易保持。除非它不是,我不應該這樣做)

回答

0

沒有測試,不知道它是如何工作的,但你可以使用jQuery這裏選擇所有的元素融入一個jQuery對象

//$("input select textarea").each(function() { 
$(":input").each(function() { //even better 
    // do stuff here 
}); 

這至少會清理的代碼,雖然你仍然有像你提到的那樣添加基於字段類型的條件語句。

+0

謝謝,但jQuery是不是一個真正的選擇... – Gabe 2008-11-21 18:27:18

+0

這太糟糕了。它真的使這種事情更簡單。 – 2008-11-21 18:30:03

1

@Ryan是在正確的軌道上,如果你想使用jQuery(我會),但我建議的東西線沿線的更多:在

$('fieldset#fieldset1 > input[type=text]').each(function() { 
     ... do something for text inputs } 
); 

$('fieldset#fieldset1 > input[type=radio]').each(function() { 
     ... do something for radios } 
); 

$('fieldset#fieldset1 > select').each(function() { 
     ... do something for selects } 
); 

$('fieldset#fieldset1 > textarea').each(function() { 
     ... do something for textareas } 
); 

作爲改進如果,則 - 其他構造。

1

單選按鈕和複選框仍然是輸入標記,並將位於輸入變量。問題是,你需要添加處理程序的檢查狀態,看看哪些單選按鈕和複選框被選中。

更糟糕的是,你可以有多個單選按鈕和複選框具有相同的名稱......實際上你必須爲單選按鈕或他們不按預期工作。

1

沒有jQuery的,沒有任何問題:

function condat(fieldset) { 
    var tagNames = ['input', 'select', 'textarea']; // Insert other tag names here 
    var elements = []; 

    for (var i in tagNames) 
     elements.concat(fieldset.getElementsByTagName(tagNames[i]); 

    for (var i in elements) { 
     // Do what you want 
    } 
} 
0

與第二Cargowire評論菲利普Dupanović解決方案一起工作對我來說,只是一個小的修改。 Cargowire的第二個評論只產生了一個數組,它只是保存了tagNames數組的切片字符(我會在註釋中寫這個,但我到目前爲止缺少代表)。

這裏是什麼工作:

function condat(fieldset) { 
    var tagNames = ['input', 'select', 'textarea']; // Insert other tag names here 
    var elements = []; 

    for (var i in tagNames) { 
     elements = elements.concat([].slice.call(fieldset.getElementsByTagName(tagNames[i]))); 
    } 
    for (var i in elements) { 
     // Do what you want. 
     // Attributes of the selected tag's can be referenced for example as 
     // elements[i].value = ...; 
    } 
} 

這方面的一個有用的應用程序將是確定按鈕僅重置一個字段,而不是整個表單。只需在//do what you want部分使用elements[i].value = elements[i].defaultValue;即可重設文本輸入。當然,將condat函數綁定到提供fieldset dom元素作爲參數的按鈕的onclick事件上。

0

你應該只使用querySelectorAll:

function condat(fieldset) { 
    var elements = fieldset.querySelectorAll('input, select, textarea'); 
    elements.forEach(function(element){ 
    // Do what you want with every element 
    }); 
}