2010-11-29 4 views
1

Lorsque vous utilisez un navigateur WebKit (Chrome ou Safari), si j'essaie d'obtenir la valeur par défaut d'une case à cocher, il renvoie "". Cependant, le même javascript dans Firefox ou IE retournera "on".Webkit checkbox la valeur par défaut est null?

permet donc dire que j'ai cette case sur une page:

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

J'utilise cette javascript pour récupérer tous les éléments « d'entrée » sur une page

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

Puis je passe par une boucle obtient la valeur comme celui-ci

elems[i].getAttribute('value') 

Lorsque elems [i] est cette case, Chrome ou Safari retourne "", mais Firef ox ou IE il retourne "sur".

Est-il possible d'utiliser Javascript pour renvoyer la valeur "on" dans Safari ou Chrome? Dans Chrome, j'utilise un appel jquery qui utilise .val() et qui retourne effectivement "on", mais j'ai besoin d'un moyen de le faire en utilisant Javascript dans Safari.

Merci!

EDIT:

Je suis à la recherche de la « valeur » attribut spécifiquement depuis la « valeur » d'une case à cocher peut être quelque chose comme « chat » ou « vélo ».

+0

avez-vous essayé de faire l'attribut de valeur de cette valeur de contrôle = "on"? – marr75

Répondre

4

Utilisez plutôt checked pour voir si une case à cocher ou une entrée radio est sélectionnée. Si vous voulez vraiment obtenir l'attribut value et ne pas voir si la case est cochée, vous devez d'abord set a value cocher la case. Si rien n'est défini, alors vous obtenez null est le comportement normal.

Vous pouvez également répliquer le comportement Firefox et IE en attribuant on vous en tant que valeur par défaut:

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

Je cherche en fait l'attribut "value" car la "valeur" d'une case peut être n'importe quoi, comme "cat" ou "bike". – sbonkosk

+0

@sbonkosk Vous devez d'abord définir une valeur pour la case à cocher. http://www.w3.org/TR/html401/interact/forms.html#adef-value-INPUT –

+0

Ouais j'ai vu ce lien, mais puisque FF et IE reviennent "sur" en utilisant le même Javascript, je veux savoir s'il existe un moyen d'obtenir la même valeur "activée" dans Chrome et Safari. – sbonkosk

0

Je pense que c'est parce que elems[i].getAttribute('value') n'est pas ce que vous devez utiliser pour obtenir l'état d'une case à cocher. Essayez d'utiliser elems[i].getAttribute('checked') ou juste elems[i].checked pour obtenir l'état. Par ailleurs, elems[i].getAttribute('value') peut être raccourci à elems[i].value.


lire votre commentaire sur une autre réponse ...

est ici la source de la déclaration .val() du repo jQuery:

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; 
} 

C'est assez simple JavaScript, et vous pouvez simplement omettre la fonction .map().


Aussi, pourquoi ne pas tester juste pour l'existence de la propriété value?

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

Bonne chance!

Questions connexes