DOMを使用してラジオボタンの値にアクセスするにはどうすればよいですか?
たとえば次のようなラジオボタンがあります。
<input name="sex" type="radio" value="male">
<input name="sex" type="radio" value="female">
それらはform1
という名前のフォーム内にあります。私がしようとすると
document.getElementByName("sex").value
チェックされた値に関係なく、常に「男性」を返します。
Canavarの非常に役立つ機能を「一般化」するだけです。
function getRadioValue(theRadioGroup)
{
var elements = document.getElementsByName(theRadioGroup);
for (var i = 0, l = elements.length; i < l; i++)
{
if (elements[i].checked)
{
return elements[i].value;
}
}
}
...このように参照されるようになります:
getRadioValue('sex');
このようなものは、まだprototype.jsの一部ではありません。
選択したものが必要な場合、ほとんどのフレームワークは次のような機能をサポートしています。
//jQuery
$("input[name='sex']:checked").val()
いくつかの方法があります。
_<input name="sex" id="sex_male" type="radio" value="male">
<input name="sex" id="sex_female" type="radio" value="female">
_
次に、document.getElementById("sex_male")
を使用できます
その後、次のようなことができます:
_//This loops over all input elements that have a name of "sex"
$$('input[name="sex"]').each( function(elem) {
//Do something
});
_
または、「男性」ラジオボタンだけを取得するには、次のようにします。
_$$('input[name="sex"][value="male"]').each(function(elem) {
//Do something
});
_
Prototype を開始する簡単な方法は、ページの<head> </ head>タグの間にこれを追加して、Googleから追加することです。
_<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js"></script>
_
次の方法で、選択したラジオの値を取得できます。
<script>
function getRadioValue()
{
for (var i = 0; i < document.getElementsByName('sex').length; i++)
{
if (document.getElementsByName('sex')[i].checked)
{
return document.getElementsByName('sex')[i].value;
}
}
}
</script>
選択したものを必要とするが、便利なフレームワークがない場合は、要素配列を反復処理して、チェックされているものを探します。
for (var i = 0; i < document.form1.sex.length; i++) {
if (document.form1.sex[i].checked) alert(document.form1.sex[i].value);
}
document.form1.sex
を使用すると、配列が返されます。
document.form1.sex[0]
=最初のラジオボタン
document.form1.sex[1]
= 2番目のラジオボタン
どちらがチェックされているかを確認するには、ループする必要があります。
whoChecked(document.form1.sex)
function whoChecked(fieldName) {
for(var x=0;x<fieldName.length;x++) {
if(fieldName[x].checked) {
return fieldname[x].value
}
}
var list = document.getElementsByName('sex');
for(var i=0;i<list.length;i++){
if(list[i].type=='radio' && list[i].checked){
alert(list[i].value);
break;
}
}
_document.getElementByName("sex").value
_
あなたはgetElementsByName('sex')[0].value
を意味しますか? (getElementByName
はありません。)
もちろん、その名前の最初の入力要素が常に選択されます。値は実際に男性です。次に、「。checked」プロパティを使用して、それが選択されているかどうかを確認します。
この単純なケースでは、次の方法で回避できます。
_var sex= document.getElementsByName("sex")[0].checked? 'male' : 'female';
_
一般的なケースでは、各無線入力をループして、どちらがチェックされているかを確認する必要があります。最初にフォームオブジェクトを取得し(フォームにIDを付けて_document.getElementById
_を使用する方が、一般に「名前」ベースのdocument.formsコレクションを使用するよりも優れています)、次にform.elements.sexにアクセスする方が良いでしょう。ページに_name="sex"
_属性(フォームフィールド以外の可能性がある)を持つ他の要素がある場合に、リストを取得します。
function getEleByName(){
if(true==document.getElementsByName('gender')[0].checked){
alert('selected gender is: male');
}
else{
alert('selected gender is: female');
}
}
他の人が示したように、ループはタスクを達成できますが、必要に応じてパフォーマンスを向上させるループを使用するよりも簡単な場合があります。また、ポータブル/モジュラーにすることができるため、さまざまな無線グループに使用できます。
簡単な例
function getValue(x) {
alert(x.value);
}
<input name="sex" type="radio" value="male" onChange="getValue(this)" />
<input name="sex" type="radio" value="female" onChange="getValue(this)" />
より複雑な例:
function getValue(x){
alert(x.value);
}
<fieldset>
<legend>Sex</legend>
<label>Male:
<input name="sex" type="radio" value="male" onChange="getValue(this)"/>
</label>
<label>Female:
<input name="sex" type="radio" value="female" onChange="getValue(this)" />
</label>
</fieldset>
<fieldset>
<legend>Age Group</legend>
<label>0-13:
<input name="ageGroup" type="radio" value="0-13" onChange="getValue(this)" />
</label>
<label>13-18:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
<label>18-30:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
<label>30+:
<input name="ageGroup" type="radio" value="13-18" onChange="getValue(this)" />
</label>
</fieldset>