2010-11-29 11 views
1

WebKitブラウザ(ChromeまたはSafari)を使用しているときに、チェックボックスのデフォルト値を取得しようとすると、「」が返されます。しかし、FirefoxやIEの同じJavaScriptが "on"に戻ります。Webkitチェックボックスのデフォルト値はnullですか?

だから私は、ページ上でこのチェックボックスを持って言うことができます:

<input type="checkbox" id="chkDefaultValue"> 

私はページ上のすべての「入力」の要素に

var elems = document.getElementsByTagName('input'); 

を返すために、このJavaScriptを使用してその後、私はそのループを通過この値を取得します

elems [i]がそのチェックボックスである場合、ChromeまたはSafariでは ""が返されますが、Firef牛やIEが "on"を返します。

SafariまたはChromeの「オン」値を返すためにJavascriptを使用する方法はありますか? Chromeでは、.val()を使用し、実際に "on"を返すjquery呼び出しを使用しますが、SafariでJavascriptを使用してこれを行う方法が必要です。

ありがとうございます!

編集:私は実際には「値」を探してい

チェックボックスの「値」は何もすることができますので、「猫」や「自転車」のように、特に属性。

+0

このコントロールのvalue属性を "on"にしてみましたか? – marr75

答えて

4

代わりに、チェックボックスまたはラジオ入力が選択されているかどうかを確認するためにcheckedを使用してください。

value属性を取得し、チェックボックスが選択されているかどうかを確認する必要がある場合は、最初にチェックボックスをset a valueにする必要があります。何も設定されていない場合は、nullを取得するのが正常な動作です。

はまた、デフォルト値として自分自身をonを割り当てることで、FirefoxとIEの挙動を再現することができます

var myVal = elems[i].getAttribute('value'); 
if(myVal === null) 
    myVal = 'on'; 
+0

"cat"や "bike"のように、チェックボックスの "値"は何でもかまいませんので、私は実際に "値"属性を特に探しています。 – sbonkosk

+0

@sbonkoskまず、チェックボックスの値を設定する必要があります。 http://www.w3.org/TR/html401/interact/forms.html#adef-value-INPUT –

+0

ええ、私はそのリンクを見ましたが、FFとIEは同じJavascriptを使って "on"に戻るので、私は知りたいChromeとSafariで同じ "オン"の価値を得るための方法があれば。 – sbonkosk

0

私はelems[i].getAttribute('value')は、チェックボックスの状態を取得するために使用されなければならないものではありませんので、それはだと思います。

elems[i].getAttribute('checked')またはelems[i].checkedを使用して状態を取得してみてください。 ところで、elems[i].getAttribute('value')はちょうどelems[i].valueに短縮することができます。


ちょうど別の答えにあなたのコメントを読んで...

ここでjQueryのレポから.val()文のソースです:ちょうどJavaScriptを非常に単純です

getVal = function(elem) 
{ 
    var type = elem.type, val = elem.value; 

    if (type === "radio" || type === "checkbox") 
    { 
    val = elem.checked; 
    } else if (type === "select-multiple") { 
    val = elem.selectedIndex > -1 ? jQuery.map(elem.options, function(elem) {return elem.selected;}).join("-"):""; 
    } else if (elem.nodeName.toLowerCase() === "select") { 
    val = elem.selectedIndex; 
    } 

    return val; 
} 

、とのことができます。 .map()関数を省略してください。


また、valueプロパティの存在をテストするだけではどうですか?

function niceValue(element) 
{ 
    if (element.value != '') 
    { 
    return element.value; 
    } elseif (element.checked) { 
    if (element.checked) 
    { 
     return 'on'; 
    } else { 
     return 'off'; 
    } 
    } 
} 

幸運!

関連する問題