2010-11-29 7 views
1

При использовании браузера WebKit (Chrome или Safari), если я попытаюсь получить значение по умолчанию для флажка, он возвращает «». Тем не менее, тот же javascript в Firefox или IE вернет «on».Значение по умолчанию для Webkit равно null?

Так позволяет сказать, что у меня есть этот флажок на странице:

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

Я использую этот JavaScript, чтобы вернуть все элементы «ввода» на странице

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

Тогда я иду через цикл, получает значение как этот

elems[i].getAttribute('value') 

Когда elems [I] является то, что флажок, в Chrome или Safari она возвращает "", но Firef ox или IE, он возвращает «on».

Есть ли способ использовать Javascript для возврата значения «on» в Safari или Chrome? В Chrome я использую вызов jquery, который использует .val(), и это фактически возвращает «on», но мне нужен способ сделать это, используя Javascript в Safari.

Спасибо!

EDIT:

Я на самом деле ищет «значение» атрибута конкретно, так как «ценность» флажок может быть что угодно, как «кошка» или «велосипед».

+0

Вы пытались сделать атрибут value этого значения управления = "on"? – marr75 2010-11-29 16:18:54

ответ

4

Используйте вместо этого checked, если выбран флажок или радиовход.

Если вы действительно хотите сделать это, получите атрибут value, и не увидите, установлен ли этот флажок, тогда вам нужно установить set a value. Если ничего не установлено, вы получаете null - это нормальное поведение.

Вы также можете повторить поведение Firefox и IE, назначив on себя в качестве значения по умолчанию:

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

Я действительно ищу атрибут «значение», потому что «значение» флажка может быть любым, например «cat» или «bike». – sbonkosk 2010-11-29 16:02:00

0

Я думаю, что это потому, что elems[i].getAttribute('value') не то, что вы должны использовать, чтобы получить состояние флажка.

Попробуйте использовать elems[i].getAttribute('checked') или просто elems[i].checked, чтобы получить статус. Кстати, elems[i].getAttribute('value') можно укоротить до elems[i].value.


Просто прочитайте свой комментарий на другой ответ ...

Вот источник для .val() заявления от 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; 
} 

Это довольно простой JavaScript, и вы можете просто опустите функцию .map().


Кроме того, почему бы не просто проверить существование value собственности?

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

Удачи вам!