使用WebKit浏览器(Chrome或Safari)时,如果我尝试获取复选框的默认值,则返回“”。但是,Firefox或IE中的相同javascript将返回“on”。
所以我想说我在页面上有这个复选框:
<input type="checkbox" id="chkDefaultValue">
我使用此javascript返回页面上的所有“输入”元素
var elems = document.getElementsByTagName('input');
然后我通过一个获得类似值的循环
elems[i].getAttribute('value')
当elems [i]是该复选框时,在Chrome或Safari中它会返回“”,但Firefox或IE会返回“on”。
有没有办法使用Javascript在Safari或Chrome中返回“on”值?在Chrome中,我使用了一个jquery调用,该调用使用.val()并实际返回“on”,但我需要一种方法在Safari中使用Javascript执行此操作。
谢谢!
编辑:
我实际上正在寻找“价值”属性,因为复选框的“值”可以是任何东西,例如“cat”或“bike”。
答案 0 :(得分:4)
使用checked来查看是否选中了复选框或无线电输入。
如果您真正想要做的是获取value
属性,而不是查看是否选中了复选框,则需要先set a value选中该复选框。如果未设置任何内容,那么获得null
是正常行为。
您还可以通过将on
自己指定为默认值来复制Firefox和IE行为:
var myVal = elems[i].getAttribute('value');
if(myVal === null)
myVal = 'on';
答案 1 :(得分:0)
我认为这是因为elems[i].getAttribute('value')
不是您应该使用的方式来获取复选框的状态。
尝试使用elems[i].getAttribute('checked')
或elems[i].checked
来获取州。
顺便说一下,elems[i].getAttribute('value')
可以缩短为elems[i].value
。
请阅读您对其他答案的评论......
以下是jQuery repo中.val()
语句的来源:
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';
}
}
}
祝你好运!