2015-10-20 4 views
2

Я пытаюсь проверить, что пользователь выбирает хотя бы один переключатель. При щелчке по флажку с именем mallname мне нужно проверить, проверено ли одно из платежных радиобоксов.Проверка Javascript, если выбрана одна радиокнопка

Вот мой HTML для оплаты (мне нужно проверить, если один из этих двух проверяются)

<fieldset> 
<legend>Payment method</legend> 
<div class='container'> 
<label for='payment' >Please select payment method.:</label> 
<p> 
<label for='payment' >Once off (Full Payment):</label> 
<input type='radio' name='payment' id='paymentoo' onClick="SetHTML2('once')" value="Once off (Full Payment)" required <?php echo($isOnceoffFullPayment?'checked="checked"':''); ?> maxlength="50" /> 
<span id='register_payment_errorloc' class='error'></span> 
<label for='payment' >Monthly Debit:</label> 
<input type='radio' name='payment' id='paymentmd' onClick="SetHTML2('montly')" value="Monthly Debit" required <?php echo($isMonthlyDebit?'checked="checked"':''); ?> maxlength="50" /> 
<span id='register_payment_errorloc' class='error'></span> 
<br> 
</div> 
</fieldset> 

HTML для флажком

<td width='400'><label for='contract' >$malls</label></td><td width='100'><input type='checkbox' name='mallname[]' id='mallname' value='$malls' onclick = 'checkpayment(); addemupfull(); addemupfulldebit();'/></td> 

Вот моя ява

<script type="text/javascript"> 
function checkpayment(){ 
var payoo = document.getElementById("paymentoo"); 
var paymd = document.getElementById("paymentmd"); 
if(!(payoo || paymd).checked){ 
var malchecks = document.getElementById("mallname"); 
malchecks.checked = false; 
alert("Please select a payment method first"); 
} 
} 
</script> 

Он работает, когда выбрано «paymentoo», но когда выбрано «paymentmd», я все равно получаю предупреждение «Пожалуйста, выберите способ оплаты спос первым»

ответ

3

!(payoo || paymd).checked только проверить payoo проверяются ли в качестве логического оператора ИЛИ будет возвращать первое truthy значения - поскольку payoo является дом элементом, он всегда будет возвращать что

Вы должны проверить

if (!payoo.checked && !paymd.checked) {// if (!(payoo.checked || paymd.checked)) { 
    var malchecks = document.getElementById("mallname"); 
    malchecks.checked = false; 
    alert("Please select a payment method first"); 
} 
+0

Спасибо. Отлично работает –

2

Ваша проблема с этим утверждением (payoo || paymd) - потому что payoo будет всегда существовать, все, что вы проверяете, проверяется payoo. Что вам нужно:

if(!(payoo.checked || paymd.checked))) 

Или еще более быстрый способ может быть:

if(document.querySelectorAll('#paymentoo:checked, #paymentmd:checked').length) 
+0

Спасибо. Отличный ответ. Я могу только поддержать 1 ответ. Я буду честным и первым ответом. Оба ответа мне очень помогли. –

+0

На самом деле вы можете обойти оба ответа;) Во всяком случае, в другом ответе есть лучшее описание оператора '' '' ', поэтому я бы выбрал этот вариант как правильный. Удачи! – somethinghere

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