2015-02-05 45 views
-1

我想知道是否存在一個無循環的單線方法來讀取HTML5中的無線輸入值。使用javascript讀取HTML5輸入無線標記

在舊的HTML:

<form> 
<input type="radio" name="sex" value="male" checked>Male 
<br> 
<input type="radio" name="sex" value="female">Female 
</form> 

的JavaScript是這樣的:

var sexes = document.getElementsByName('sex'); 
var sex_value; 
for(var i = 0; i < sexes.length; i++){ 
    if(sexes[i].checked){ 
     sex_value = sexes[i].value; 
    } 
} 

但同樣可以使用jQuery在一行中做過類似

$('input[name="sex"]:checked').val(); 

所以,我只是想知道:

  1. 在沒有Jquery的情況下,使用HTML5做一個更好的方法是什麼?
  2. 是否有任何其他JS庫,如JQuery,可以做同樣的單行方法或更好?
+0

讀取值做什麼? – 2015-02-05 19:14:46

+0

爲什麼不使用jquery如果你想要一個單行的方法?順便說一句..太多的性別布萊恩之間的變量..'性別','sex_value','sexes.length' ..開玩笑 – Krishna 2015-02-05 19:16:30

+0

爲什麼你想看看外面的jQuery?如果它起作用,爲什麼如果有另一個庫返回類似的結果呢? – Mark 2015-02-05 19:21:58

回答

2

的〔JavaScript的]是這樣的:

var sexes = document.getElementsByName('sex'); 
var sex_value; 
for(var i = 0; i < sexes.length; i++){ 
    if(sexes[i].checked){ 
     sex_value = sexes[i].value; 
    } 
} 

但是,同樣可以使用jQuery在一個行完成像

$('input[name="sex"]:checked').val(); 

同樣可以做到在原生DOM/JavaScript中的一行中:

// using a CSS selector to retrieve a single DOM node, 
// and retrieving its value property: 
document.querySelector('input[name=sex]:checked').value; 
例如

或者,讓所有元素,也是應該的複選框:

// using a CSS selector to retrieve all matching elements 
// as a (non-live) NodeList: 
var all = document.querySelectorAll('input[name=favourites]:checked'); 

檢索所有這些複選框的值,到一個數組:

// retrieving the elements into a NodeList: 
var all = document.querySelectorAll('input[name=favourites]:checked'), 
    // using Array.prototype.slice() (with 
    // Function.prototype.call()) to convert 
    // the NodeList into an Array: 
    allArray = Array.prototype.slice.call(all, 0), 
    // using Array.prototype.map() to iterate over that 
    // array to return another array containing only 
    // the values of each of the array-elements: 
    allValues = allArray.map(function (arrayElement) { 
        return arrayElement.value; 
       }); 

可如果你真的想(跳過Array.prototype.slice()的呼叫):

var allValues = Array.map.call(document.querySelectorAll('input[name=favourites]:checked', function (arrayElement) { 
    return arrayElement.value; 
}); 

參考文獻:

+0

謝謝。我正在尋找像你這樣的答案。我沒有意識到沒有Jquery的單行解決方案。請將我鏈接到一個頁面,您可以通過簡單的方式瞭解更多關於DOM的內容。 – qbektrix 2015-02-05 20:37:17

0
  1. 有沒有使用jQuery更好的辦法?沒有圈和一個班輪?沒有
  2. 是否有另外一個類似jQuery的庫,可以做更好的單線程?沒有

真正的問題是那麼,爲什麼厭惡jQuery? jQuery經過了很好的測試並被社區所接受,以至於有無數的js庫是由jQuery構建的。

+0

我對Jquery沒有問題。但我知道其他類似Mootools的圖書館。我是後端開發人員,只想更新我的html,js和css技能。 – qbektrix 2015-02-05 19:29:00

+0

jQuery這是更好的解決方案。 – 2015-02-05 20:18:56

0

原則上,您可以使用RadioNodeList屬性,即part of HTML5。但是,IE 8顯然不支持它,而且根據MDN,移動瀏覽器的支持是未知的。

更精確地說,從一個form元件,其中所述elements酒店有namedItem方法中,當name屬性的值被給定爲參數,它返回一個RadioNodeList對象開始。該對象具有value屬性,該屬性產生名稱標識的組中當前選中的單選按鈕的值。

例子:

<form> 
 
<input type="radio" name="sex" value="male" checked>Male 
 
<br> 
 
<input type="radio" name="sex" value="female">Female 
 
<br> 
 
<button type=button onclick=show()>Show sex</button> 
 
</form> 
 
<script> 
 
function show() { 
 
    alert(document.forms[0].elements.namedItem('sex').value) 
 
} 
 
</script>

這是否是比其他一些更好的辦法是見仁見智的問題,並依賴於上下文和範圍。在SO上關於替代圖書館的問題是無關緊要的。

+0

題外話:片段部分整齊。你是怎麼做到的?? – qbektrix 2015-02-05 20:30:26

+0

@qbektrix:在問題和答案的編輯面板上方,有一個按鈕,它看起來像一個帶有''的頁面,點擊該按鈕,它將顯示一個編輯器(只適用於HTML,CSS和JavaScript)。 – 2015-02-06 00:14:50

+0

這在IE 11中不起作用。 – dwo 2015-09-28 21:37:21