Ответы:
Давайте представим, что у вас есть такой HTML
<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />
Для проверки на стороне клиента, вот несколько Javascript, чтобы проверить, какой из них выбран:
if(document.getElementById('gender_Male').checked) {
//Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
//Female radio button is checked
}
Вышесказанное можно сделать более эффективным в зависимости от точной природы вашей разметки, но этого должно быть достаточно, чтобы начать работу.
Если вы просто хотите посмотреть , выбрана ли какая-либо радиокнопка в любом месте на странице, PrototypeJS сделает это очень просто.
Вот функция, которая будет возвращать true, если где-то на странице выбран хотя бы один переключатель. Опять же, это может потребоваться настроить в зависимости от вашего конкретного HTML.
function atLeastOneRadio() {
return ($('input[type=radio]:checked').size() > 0);
}
Для проверки на стороне сервера (помните, вы не можете полностью зависеть от Javascript для проверки!) , Это будет зависеть от вашего выбора языка, но вы просто проверяете genderзначение строки запроса.
С jQuery это было бы что-то вроде
if ($('input[name=gender]:checked').length > 0) {
// do something here
}
Позвольте мне разбить это на части, чтобы покрыть это более ясно. JQuery обрабатывает вещи слева направо.
input[name=gender]:checked
input ограничивает его для ввода тегов.[name=gender] ограничивает его тегами с именем пола в предыдущей группе.:checked ограничивает его флажками / переключателями, выбранными в предыдущей группе.Если вы хотите вообще избежать этого, отметьте одну из переключателей checked="checked"в HTML-коде как флажок ( ), что гарантирует, что всегда будет выбран один переключатель.
Ванильный JavaScript-способ
var radios = document.getElementsByTagName('input');
var value;
for (var i = 0; i < radios.length; i++) {
if (radios[i].type === 'radio' && radios[i].checked) {
// get value, set checked flag or do whatever you need to
value = radios[i].value;
}
}
name.
Просто пытаюсь улучшить решение Russ Cam с помощью некоторого CSS-селектора, добавленного в ванильный JavaScript.
var radios = document.querySelectorAll('input[type="radio"]:checked');
var value = radios.length>0? radios[0].value: null;
Здесь нет реальной необходимости в jQuery, querySelectorAll теперь достаточно широко поддерживается.
Изменить: исправлена ошибка с селектором CSS, я включил кавычки, хотя вы можете их опустить, в некоторых случаях вы не можете, поэтому лучше оставить их в.
a[href^="http://"]) они были бы необходимы, и согласованность более удобна в обслуживании. Кроме того, это позволяет объявлению атрибута соответствовать соответствующему HTML.
HTML-код
<input type="radio" name="offline_payment_method" value="Cheque" >
<input type="radio" name="offline_payment_method" value="Wire Transfer" >
Код Javascript:
var off_payment_method = document.getElementsByName('offline_payment_method');
var ischecked_method = false;
for ( var i = 0; i < off_payment_method.length; i++) {
if(off_payment_method[i].checked) {
ischecked_method = true;
break;
}
}
if(!ischecked_method) { //payment method button is not checked
alert("Please choose Offline Payment Method");
}
Вы можете использовать этот простой скрипт. У вас может быть несколько переключателей с одинаковыми именами и разными значениями.
var checked_gender = document.querySelector('input[name = "gender"]:checked');
if(checked_gender != null){ //Test if something was checked
alert(checked_gender.value); //Alert the value of the checked.
} else {
alert('Nothing checked'); //Alert, nothing was checked.
}
document.forms[0].elements['nameOfRadioList'].value
Сценарии на этой странице помогли мне придумать сценарий ниже, который я считаю более полным и универсальным. По сути, он будет проверять любое количество переключателей в форме, а это означает, что он выберет параметр радио для каждой из различных групп радиосвязи в форме. например, в тестовой форме ниже:
<form id="FormID">
Yes <input type="radio" name="test1" value="Yes">
No <input type="radio" name="test1" value="No">
<br><br>
Yes <input type="radio" name="test2" value="Yes">
No <input type="radio" name="test2" value="No">
<input type="submit" onclick="return RadioValidator();">
Сценарий RadioValidator перед отправкой должен убедиться, что дан ответ как для «test1», так и «test2». Вы можете иметь столько радиогрупп в форме, и она будет игнорировать любые другие элементы формы. Все пропущенные ответы по радио будут отображаться во всплывающем окне с одним оповещением. Вот и все, я надеюсь, что это помогает людям. Любые исправления ошибок или полезные модификации приветствуются :)
<SCRIPT LANGUAGE="JAVASCRIPT">
function RadioValidator()
{
var ShowAlert = '';
var AllFormElements = window.document.getElementById("FormID").elements;
for (i = 0; i < AllFormElements.length; i++)
{
if (AllFormElements[i].type == 'radio')
{
var ThisRadio = AllFormElements[i].name;
var ThisChecked = 'No';
var AllRadioOptions = document.getElementsByName(ThisRadio);
for (x = 0; x < AllRadioOptions.length; x++)
{
if (AllRadioOptions[x].checked && ThisChecked == 'No')
{
ThisChecked = 'Yes';
break;
}
}
var AlreadySearched = ShowAlert.indexOf(ThisRadio);
if (ThisChecked == 'No' && AlreadySearched == -1)
{
ShowAlert = ShowAlert + ThisRadio + ' radio button must be answered\n';
}
}
}
if (ShowAlert != '')
{
alert(ShowAlert);
return false;
}
else
{
return true;
}
}
</SCRIPT>
Обратите внимание на это поведение с jQuery при получении значений радиовхода:
$('input[name="myRadio"]').change(function(e) { // Select the radio input group
// This returns the value of the checked radio button
// which triggered the event.
console.log( $(this).val() );
// but this will return the first radio button's value,
// regardless of checked state of the radio group.
console.log( $('input[name="myRadio"]').val() );
});
Поэтому $('input[name="myRadio"]').val()не возвращает проверенное значение радиовхода, как вы могли бы ожидать - оно возвращает значение первой радиокнопки.
С mootools ( http://mootools.net/docs/core/Element/Element )
HTML:
<input type="radio" name="radiosname" value="1" />
<input type="radio" name="radiosname" value="2" id="radiowithval2"/>
<input type="radio" name="radiosname" value="3" />
ЯШ:
// Check if second radio is selected (by id)
if ($('radiowithval2').get("checked"))
// Check if third radio is selected (by name and value)
if ($$('input[name=radiosname][value=3]:checked').length == 1)
// Check if something in radio group is choosen
if ($$('input[name=radiosname]:checked').length > 0)
// Set second button selected (by id)
$("radiowithval2").set("checked", true)
это служебная функция, которую я создал, чтобы решить эту проблему
//define radio buttons, each with a common 'name' and distinct 'id'.
// eg- <input type="radio" name="storageGroup" id="localStorage">
// <input type="radio" name="storageGroup" id="sessionStorage">
//param-sGroupName: 'name' of the group. eg- "storageGroup"
//return: 'id' of the checked radioButton. eg- "localStorage"
//return: can be 'undefined'- be sure to check for that
function checkedRadioBtn(sGroupName)
{
var group = document.getElementsByName(sGroupName);
for ( var i = 0; i < group.length; i++) {
if (group.item(i).checked) {
return group.item(i).id;
} else if (group[0].type !== 'radio') {
//if you find any in the group not a radio button return null
return null;
}
}
}
Это будет действительно для переключателей с одинаковым именем, JQuery не требуется.
var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked })[0];
Если мы говорим о флажках, и мы хотим, чтобы список с флажками отмечен общим именем:
var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked });
if(document.querySelectorAll('input[type="radio"][name="name_of_radio"]:checked').length < 1)
просто небольшая модификация Марка Биека;
HTML-код
<form name="frm1" action="" method="post">
<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" / >
<input type="button" value="test" onclick="check1();"/>
</form>
и код Javascript, чтобы проверить, выбран ли переключатель
<script type="text/javascript">
function check1() {
var radio_check_val = "";
for (i = 0; i < document.getElementsByName('gender').length; i++) {
if (document.getElementsByName('gender')[i].checked) {
alert("this radio button was clicked: " + document.getElementsByName('gender')[i].value);
radio_check_val = document.getElementsByName('gender')[i].value;
}
}
if (radio_check_val === "")
{
alert("please select radio button");
}
}
</script>
Существует очень сложный способ проверить, проверены ли какие-либо из переключателей с помощью ECMA6 и метода .some().
Html:
<input type="radio" name="status" id="marriedId" value="Married" />
<input type="radio" name="status" id="divorcedId" value="Divorced" />
И JavaScript:
let htmlNodes = document.getElementsByName('status');
let radioButtonsArray = Array.from(htmlNodes);
let isAnyRadioButtonChecked = radioButtonsArray.some(element => element.checked);
isAnyRadioButtonCheckedбудет, trueесли некоторые из переключателей отмечены, и falseесли ни одна из них не отмечена.
http://www.somacon.com/p143.php/
function getCheckedValue(radioObj) {
if(!radioObj)
return "";
var radioLength = radioObj.length;
if(radioLength == undefined)
if(radioObj.checked)
return radioObj.value;
else
return "";
for(var i = 0; i < radioLength; i++) {
if(radioObj[i].checked) {
return radioObj[i].value;
}
}
return "";
}
В JQuery еще один способ проверить текущее состояние переключателей - получить атрибут «флажок».
Например:
<input type="radio" name="gender_male" value="Male" />
<input type="radio" name="gender_female" value="Female" />
В этом случае вы можете проверить кнопки, используя:
if ($("#gender_male").attr("checked") == true) {
...
}
$("#gender_male").attr("checked")является строка, "checked"а не логическое значение.
Этот код предупредит выбранный переключатель при отправке формы. Он использовал jQuery для получения выбранного значения.
$("form").submit(function(e) {
e.preventDefault();
$this = $(this);
var value = $this.find('input:radio[name=COLOR]:checked').val();
alert(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<input name="COLOR" id="Rojo" type="radio" value="red">
<input name="COLOR" id="Azul" type="radio" value="blue">
<input name="COLOR" id="Amarillo" type="radio" value="yellow">
<br>
<input type="submit" value="Submit">
</form>
Я использовал оператор распространения и некоторые, чтобы проверить, что хотя бы один элемент в массиве проходит тест.
Я разделяю, для кого беспокойство.
var checked = [...document.getElementsByName("gender")].some(c=>c.checked);
console.log(checked);
<input type="radio" name="gender" checked value="Male" />
<input type="radio" name="gender" value="Female" / >
Вот решение, которое расширено, чтобы не продолжать отправку и отправить предупреждение, если переключатели не отмечены. Конечно, это будет означать, что вы должны их не проверять для начала!
if(document.getElementById('radio1').checked) {
} else if(document.getElementById('radio2').checked) {
} else {
alert ("You must select a button");
return false;
}
Просто не забудьте установить идентификатор («radio1», «radio2» или как вы его называли) в форме для каждой из переключателей, иначе скрипт не будет работать.
if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }.
Пример:
if (!checkRadioArray(document.ExamEntry.level)) {
msg+="What is your level of entry? \n";
document.getElementById('entry').style.color="red";
result = false;
}
if(msg==""){
return result;
}
else{
alert(msg)
return result;
}
function Radio() {
var level = radio.value;
alert("Your level is: " + level + " \nIf this is not the level your taking then please choose another.")
}
function checkRadioArray(radioButtons) {
for(var r=0;r < radioButtons.length; r++) {
if (radioButtons[r].checked) {
return true;
}
}
return false;
}
Форма
<form name="teenageMutant">
<input type="radio" name="ninjaTurtles"/>
</form>
Сценарий
if(!document.teenageMutant.ninjaTurtles.checked){
alert('get down');
}
Скрипка: http://jsfiddle.net/PNpUS/
Я просто хочу убедиться, что что-то выбрано (используя jQuery):
// html
<input name="gender" type="radio" value="M" /> Male <input name="gender" type="radio" value="F" /> Female
// gender (required)
var gender_check = $('input:radio[name=gender]:checked').val();
if ( !gender_check ) {
alert("Please select your gender.");
return false;
}
Если вы хотите использовать ванильный JavaScript, не хотите загромождать разметку, добавляя идентификаторы на каждую радиокнопку, и заботитесь только о современных браузерах , следующий функциональный подход для меня немного более приятен, чем цикл for:
<form id="myForm">
<label>Who will be left?
<label><input type="radio" name="output" value="knight" />Kurgan</label>
<label><input type="radio" name="output" value="highlander" checked />Connor</label>
</label>
</form>
<script>
function getSelectedRadioValue (formElement, radioName) {
return ([].slice.call(formElement[radioName]).filter(function (radio) {
return radio.checked;
}).pop() || {}).value;
}
var formEl = document.getElementById('myForm');
alert(
getSelectedRadioValue(formEl, 'output') // 'highlander'
)
</script>
Если ни то, ни другое не проверено, оно вернется undefined(хотя вы можете изменить строку выше, чтобы вернуть что-то другое, например, чтобы получить falseвозвращение, вы можете изменить соответствующую строку выше на:) }).pop() || {value:false}).value;.
Существует также перспективный подход к полифилу, так как интерфейс RadioNodeList должен упростить использование valueсвойства в списке дочерних радиоэлементов формы (в приведенном выше коде как formElement[radioName]), но у него есть свои проблемы: Как заполнить RadioNodeList ?
Это также работает, избегая вызова для идентификатора элемента, но вызывая его, используя в качестве элемента массива.
Следующий код основан на том факте, что массив, называемый группой radiobuttons, состоит из элементов radiobuttons в том же порядке, в котором они были объявлены в html-документе:
if(!document.yourformname.yourradioname[0].checked
&& !document.yourformname.yourradioname[1].checked){
alert('is this working for all?');
return false;
}
HTML:
<label class="block"><input type="radio" name="calculation" value="add">+</label>
<label class="block"><input type="radio" name="calculation" value="sub">-</label>
<label class="block"><input type="radio" name="calculation" value="mul">*</label>
<label class="block"><input type="radio" name="calculation" value="div">/</label>
<p id="result"></p>
Java-script
var options = document.getElementsByName("calculation");
for (var i = 0; i < options.length; i++) {
if (options[i].checked) {
// do whatever you want with the checked radio
var calc = options[i].value;
}
}
if(typeof calc == "undefined"){
document.getElementById("result").innerHTML = " select the operation you want to perform";
return false;
}
Дайте переключателям одно имя, но разные идентификаторы.
var verified1 = $('#SOME_ELEMENT1').val();
var verified2 = $('#SOME_ELEMENT2').val();
var final_answer = null;
if( $('#SOME_ELEMENT1').attr('checked') == 'checked' ){
//condition
final_answer = verified1;
}
else
{
if($('#SOME_ELEMENT2').attr('checked') == 'checked'){
//condition
final_answer = verified2;
}
else
{
return false;
}
}