Радиокнопка, производящая неопределенное значение в функции JavaScript - PullRequest
1 голос
/ 18 сентября 2010

Я пытаюсь отправить значение переключателя в функцию JavaScript. В конце концов, функция сделает больше, но мое тестирование зашло в тупик, потому что я продолжаю получать возвращаемое значение undefined. Вот что у меня есть:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
<SCRIPT TYPE="text/javascript">
 <!--
 function jobWindow(){
  var target;
  for( i = 0; i < document.jobView.sales.length; i++ ){
   if( document.jobView.sales[i].checked == true )
   target = document.jobView.sales[i].value;
   break;
  }
  alert( "val = " + target );
  //var load = window.open('target','','scrollbars=no,menubar=no,height=600,width=800,resizable=yes,toolbar=no,location=no,status=no');  
 }
 // -->
</script>

</head>

<body>

<form name="jobView">
<input name ="sales" value="all" type="radio" />All&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="darell"  type="radio" />Darell&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="kevin" type="radio" />Kevin&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="brad" type="radio" />Brad&nbsp;&nbsp;&nbsp;&nbsp;
<input name="sales" value="chongo" type="radio" />Chongo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" value="View Records" onclick="jobWindow()"/>&nbsp;&nbsp;&nbsp;&nbsp;
<input type="button" value="View Calendar" />
</form>

</body>

</html>

Ответы [ 4 ]

4 голосов
/ 18 сентября 2010

Путь доступа, который вы на самом деле хотите:

var el = document.forms["jobView"].elements["sales"];

Прямая цепочка точек (document.jobView.sales) делает неявный вызов коллекции «all», которая будет работать только в IE. (Да, я знаю, что Firefox возвращает идентично выглядящую строку в консоли ошибок, когда что-то идет не так, но вы не можете использовать ее в своем собственном коде.) GetELementsByTagName () и getElementsByName () будут работать нормально, но вам нужно убедиться, что элементы в возвращенной коллекции именно те, которые вам действительно нужны. (Предположим, что придет время, когда вы захотите создать более одной формы на странице, и имена полей столкнутся. Конечно, этого никогда не произойдет, если вы не сделаете это предположение из ворот, после чего другой разработчик немедленно добавит вторую форму на страницу, которую вы только что зафиксировали.)

3 голосов
/ 18 сентября 2010

изменить document.jobView.sales на document.getElementsByName('sales')

3 голосов
/ 18 сентября 2010

Попробуйте с document.getElementsByTagName вот так:

 function jobWindow(){
  var myvalue;
  var el = document.getElementsByTagName('input');

  for( i = 0; i < el.length; i++ ){
   if (document.forms['jobView'].el[i].type === 'radio' && document.forms['jobView'].el[i].name === 'sales')
   {
     if(document.forms['jobView'].el[i].checked == true )
     {
       myvalue = document.forms['jobView'].el[i].value;
       break;
     }
   }
  }
  alert( "val = " + myvalue );
 }

Обратите внимание, что ваша строка break никогда не выполнялась, потому что вы пропустили фигурные скобки:

if( document.jobView.sales[i].checked == true )
{
   target = document.jobView.sales[i].value;
   break;
}
1 голос
/ 18 сентября 2010

добавьте отладку.например, поместите alert () внутри оператора for (), чтобы убедиться, что он получает определение для document.jobView.sales.length.

Если он не делает предупреждение, вы можете почти поспорить, что document.jobView.sales.length не определено.

Затем вы можете сделать try { var length = document.jobView.sales.length; } catch(e) { alert(e); }, чтобы проверить это.

Если вы убедитесь, что document.jobView.sales.length не определен, вам, возможно, придется использовать document.getElementsByTagName и просмотреть ихвместо document.jobView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...