Значение флажка Webkit по умолчанию равно нулю? - PullRequest
1 голос
/ 29 ноября 2010

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

Итак, допустим, у меня есть этот флажок на странице:

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

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

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

Затем я прохожу цикл, который получает значение, подобное этому

elems[i].getAttribute('value')

Когда elems [i] является этим флажком, в Chrome или Safari он возвращает"", но Firefox или IE возвращают "on".

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

Спасибо!

РЕДАКТИРОВАТЬ:

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

Ответы [ 2 ]

4 голосов
/ 29 ноября 2010

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

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

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

var myVal = elems[i].getAttribute('value');
if(myVal === null)
    myVal = 'on';
0 голосов
/ 29 ноября 2010

Я думаю, это потому, что 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';
    }
  }
}

Удачи!

...