2014-09-16 2 views
0

Я создаю форму запроса оплаты, в которой пользователь будет выбирать, как они хотят получать оплату за сверхурочную работу. Двумя вариантами являются «оплата» (пользователь получает дополнительную плату в своей зарплате) или «время» (пользователь получает компенсационный тайм-аут, который будет принят позднее).Проверка переключателей с Javascript

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

Я пытаюсь использовать более простой булевский язык и хотел бы придерживаться этой опции, а не для цикла или использовать JQuery, если это возможно.

здесь соответствующая часть HTML:

<form class="oTcard" name="otCard" onSubmit="return submitCard()" method="post"> 
<div> 
    <label> 
     <span>request</span> 
      <div style="display:block"> 
       <input class="radio" type="radio" id="timePay" name="timePay" value="0" ><span>time</span> 
       <input class="radio" type="radio" id="timePay" name="timePay" value="1"><span>pay</span> 
      </div> 
    </label> 
</div> 
<input type="submit" id="submit" value="submit"> 
</form> 

здесь соответствующая часть JavaScript:

function submitCard (form) { 
    errorString = ""; 
    if((form.timePay[0].checked == false) && (form.timePay[1].checked == false)) { 
     alert("please choose either time or pay"); 
     timePay[0].focus(); 
     return false; 
    } 
    if(errorString = "") { 
     form.submit() 
    } 
} 

Edit добавить следующее:

ответ Кирилл д.Д. указал мне в правильном направлении. Я изменил идентификаторы переключателей, чтобы быть уникальными для каждой кнопки. HTML, теперь гласит:

<form class="oTcard" name="otCard" onSubmit="return submitCard()" method="post"> 
<div> 
    <label> 
     <span>request</span> 
      <div> 
       <input class="radio" type="radio" id="selectTime" name="timePay" value="0"><span>time</span> 
       <input class="radio" type="radio" id="selectPay" name="timePay" value="1"><span>pay</span> 
      </div> 
    </label> 
</div> 
<input type="submit" id="submit" value="submit"> 
</form> 

Я тогда определяется каждую кнопку в виде отдельной переменной, а не все вместе как «timePay», как я был раньше, и изменил JavaScript следующим образом:

if((selectTime.checked == false) && (selectPay.checked == false)) { 
    alert("please choose either time or pay"); 
    selectTime.focus(); 
    return false; 
} 
+0

" нет никаких различий между моей тестовой программой и проектом «Вы проверяли, что ваш javascript не ломается где-то в другом месте? Вы проверяли, что вы не использовали одно и то же имя функции дважды? –

+0

Код проверки, который у меня уже есть (проверяет, что текстовые поля пустые) работает правильно, когда я нажимаю кнопку отправки как есть. это только когда я добавляю в код проверки для переключателей, что он перестает работать – StateofDK

ответ

0

Сначала в вашем HTML: Вы должны использовать один и тот же «имя» атрибут, а другой ID (demo)

Некоторые браузер не могут быть совместимы с тем, что вы пытаетесь сделать.Вместо того, чтобы использовать параметр «формы» в function submitCard (form), вы просто должны иметь функцию function submitCard(), а затем найти элементы, которые вы хотите в веб-страницы, используя их ID

function submitCard() { 
    checkbox1 = document.getElementById("timeCheckBox").checked 
    checkbox2 = document.getElementById("payCheckBox").checked 
    if(!checkbox1 && !checkbox2) 
     alert("nothing checked !"); 
     return false; 
    } 
    else{ 
     return true 
    } 
} 

HTML, будет выглядеть

<form class="oTcard" name="otCard" onSubmit="return submitCard()" method="post"> 
<div> 
    <label> 
     <span>request</span> 
      <div style="display:block"> 
       <input class="radio" type="radio" id="timeCheckBox" name="timePay" value="0" ><span>time</span> 
       <input class="radio" type="radio" id="payCheckBox" name="timePay" value="1"><span>pay</span> 
      </div> 
    </label> 
</div> 
<input type="submit" id="submit" value="submit"> 
</form> 
+0

спасибо, что указал мне в правильном направлении. См. Редактирование исходного вопроса для конечного продукта. – StateofDK

+0

Рад, что это помогло: D –

0

Вы не передавая ссылку формы на функцию submitCard().

Изменить

<form class="oTcard" name="otCard" onSubmit="return submitCard()" method="post">

к

<form class="oTcard" name="otCard" onSubmit="return submitCard(this)" method="post">

Парочка другие примечания:

  1. Вы не должны использовать идентификатор timePay больше, чем когда-то на форме.
  2. Нельзя помещать div теги внутри span теги.

Рабочий пример here

+0

у меня создалось впечатление, что идентификатор (т. е. timePay) должен быть одинаковым для категории переключателей, если вы хотите, чтобы они работали правильно. Значит ли тогда только одно имя? Должна ли первая кнопка быть id = «время», а вторая - id = «платить» или вы рекомендуете другой метод ID? – StateofDK

+0

Да, только одно слово «имя» должно быть одинаковым для переключателей в той же группе. В вашем конкретном случае вам даже не нужно «id» на переключателях, как видно [здесь] (http://jsfiddle.net/x2orkh9a/2/), но «время» и «оплата», похоже, имеют смысл если вам нужны идентификаторы. – dave

+0

Он все еще не работает. Я изменил «return submitCard()» на «return submitCard (this)», и код все равно не будет работать. Остальная часть проверки выполняется правильно, но когда я добавляю вначале проверку радиокнопки, ни одна из них не запускается. – StateofDK

0
<form class="oTcard" name="otCard" onSubmit="return submitCard(this)" method="post"> 

должны передать аргумент в function.Thats, почему проверка JS получение не удалось.

+0

попробовал. все еще не работает. – StateofDK

Смежные вопросы