Webkit复选框默认值为null?

时间:2010-11-29 15:56:06

标签: javascript safari webkit

使用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”。

2 个答案:

答案 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';
    }
  }
}
祝你好运!

相关问题