Odpowiedzi:
Udawajmy, że masz taki HTML
<input type="radio" name="gender" id="gender_Male" value="Male" />
<input type="radio" name="gender" id="gender_Female" value="Female" />
Aby sprawdzić poprawność po stronie klienta, oto JavaScript, aby sprawdzić, który jest wybrany:
if(document.getElementById('gender_Male').checked) {
//Male radio button is checked
}else if(document.getElementById('gender_Female').checked) {
//Female radio button is checked
}
Powyższe może być bardziej wydajne w zależności od dokładnej natury twojego znacznika, ale to powinno wystarczyć, aby zacząć.
Jeśli chcesz tylko sprawdzić, czy jakiś przycisk opcji jest zaznaczony w dowolnym miejscu na stronie, PrototypeJS to bardzo proste.
Oto funkcja, która zwróci wartość true, jeśli przynajmniej jeden przycisk opcji zostanie wybrany gdzieś na stronie. Ponownie może to wymagać dostosowania w zależności od konkretnego kodu HTML.
function atLeastOneRadio() {
return ($('input[type=radio]:checked').size() > 0);
}
W przypadku sprawdzania poprawności po stronie serwera (pamiętaj, że sprawdzanie poprawności nie może polegać wyłącznie na JavaScript!) , Zależy to od wybranego języka, ale sprawdzasz tylko genderwartość ciągu żądania.
Z jQuery byłoby to coś w rodzaju
if ($('input[name=gender]:checked').length > 0) {
// do something here
}
Pozwól, że podzielę to na kawałki, aby jaśniej to zakryć. jQuery przetwarza rzeczy od lewej do prawej.
input[name=gender]:checked
input ogranicza to do tagów wejściowych.[name=gender] ogranicza go do tagów o nazwie płeć w poprzedniej grupie.:checked ogranicza to do pól wyboru / przycisków opcji, które są wybrane w poprzedniej grupie.Jeśli chcesz całkowicie tego uniknąć, zaznacz jeden z przycisków opcji jako zaznaczony ( checked="checked") w kodzie HTML, co zagwarantuje, że zawsze zostanie wybrany jeden przycisk opcji.
Waniliowy sposób 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.
Próbuję ulepszyć rozwiązanie Russ Cam, dodając cukier selektorowy CSS z waniliowym JavaScript.
var radios = document.querySelectorAll('input[type="radio"]:checked');
var value = radios.length>0? radios[0].value: null;
Nie ma tutaj potrzeby używania jQuery, querySelectorAll jest teraz wystarczająco obsługiwany.
Edycja: naprawiłem błąd w selektorze css, umieściłem cytaty, chociaż możesz je pominąć, w niektórych przypadkach nie możesz, więc lepiej je zostawić.
a[href^="http://"]) byłyby one wymagane, a spójność jest łatwiejsza do utrzymania. Poza tym pozwala to deklaracji atrybutu dopasować odpowiedni HTML.
Kod HTML
<input type="radio" name="offline_payment_method" value="Cheque" >
<input type="radio" name="offline_payment_method" value="Wire Transfer" >
Kod 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");
}
Możesz użyć tego prostego skryptu. Możesz mieć wiele przycisków opcji o takich samych nazwach i różnych wartościach.
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
Skrypty na tej stronie pomogły mi wymyślić poniższy skrypt, który moim zdaniem jest bardziej kompletny i uniwersalny. Zasadniczo sprawdzi poprawność dowolnej liczby przycisków opcji w formularzu, co oznacza, że upewni się, że wybrano opcję opcji dla każdej z różnych grup opcji w formularzu. np. w poniższym formularzu testu:
<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();">
Skrypt RadioValidator upewni się, że udzielono odpowiedzi zarówno na „test1”, jak i „test2” przed przesłaniem. W formularzu możesz mieć tyle grup radiowych, co zignoruje wszelkie inne elementy formularza. Wszystkie brakujące odpowiedzi radiowe pojawią się w oknie podręcznym jednego ostrzeżenia. Mam nadzieję, że to pomoże ludziom. Wszelkie naprawy błędów i pomocne modyfikacje są mile widziane :)
<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>
Zwróć uwagę na to zachowanie związane z jQuery podczas pobierania wartości wejściowych radia:
$('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() );
});
Tak $('input[name="myRadio"]').val()nie zwróci sprawdzenia wartości wejściowych radiowej, jak można się spodziewać - zwraca wartość pierwszego przycisku radiowego.
Z 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" />
js:
// 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)
jest to funkcja narzędzia, którą stworzyłem, aby rozwiązać ten problem
//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;
}
}
}
Dotyczy to przycisków radiowych o tej samej nazwie, nie wymaga JQuery.
var x = Array.prototype.filter.call(document.getElementsByName('checkThing'), function(x) { return x.checked })[0];
Jeśli mówimy o polach wyboru i chcemy, aby lista z zaznaczonymi polami wyboru miała wspólną nazwę:
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)
drobna modyfikacja Marka Bieka;
KOD 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>
i kod Javascript, aby sprawdzić, czy wybrany jest przycisk opcji
<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>
Istnieje bardzo wyrafinowany sposób na sprawdzenie, czy którykolwiek z przycisków opcji jest sprawdzany za pomocą ECMA6 i metody .some().
HTML:
<input type="radio" name="status" id="marriedId" value="Married" />
<input type="radio" name="status" id="divorcedId" value="Divorced" />
I javascript:
let htmlNodes = document.getElementsByName('status');
let radioButtonsArray = Array.from(htmlNodes);
let isAnyRadioButtonChecked = radioButtonsArray.some(element => element.checked);
isAnyRadioButtonCheckedbędzie, truejeśli niektóre przyciski opcji są zaznaczone, a falseżaden z nich nie jest zaznaczony.
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 "";
}
W JQuery innym sposobem sprawdzenia aktualnego stanu przycisków opcji jest uzyskanie atrybutu „zaznaczone”.
Na przykład:
<input type="radio" name="gender_male" value="Male" />
<input type="radio" name="gender_female" value="Female" />
W takim przypadku możesz sprawdzić przyciski za pomocą:
if ($("#gender_male").attr("checked") == true) {
...
}
$("#gender_male").attr("checked")jest łańcuchem, "checked"a nie wartością logiczną.
Ten kod ostrzeże wybrany przycisk radiowy po przesłaniu formularza. Użył jQuery, aby uzyskać wybraną wartość.
$("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>
Użyłem operatora rozkładania, a niektóre sprawdzają, czy przynajmniej jeden element w tablicy przechodzi test.
Podzielam się o kogo martwić.
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" / >
Oto rozwiązanie, które zostało rozszerzone, aby nie kontynuować przesyłania i wysłać alert, jeśli przyciski radiowe nie są zaznaczone. Oczywiście oznaczałoby to, że musisz je odznaczyć na początek!
if(document.getElementById('radio1').checked) {
} else if(document.getElementById('radio2').checked) {
} else {
alert ("You must select a button");
return false;
}
Pamiętaj tylko, aby ustawić identyfikator („radio1”, „radio2” lub jakkolwiek to nazwałeś) w formularzu dla każdego przycisku opcji, w przeciwnym razie skrypt nie będzie działał.
if (!document.getElementById('radio1').checked && !document.getElementById('radio2').checked) { alert(); }.
Przykład:
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;
}
Formularz
<form name="teenageMutant">
<input type="radio" name="ninjaTurtles"/>
</form>
Scenariusz
if(!document.teenageMutant.ninjaTurtles.checked){
alert('get down');
}
Skrzypce: http://jsfiddle.net/PNpUS/
Chcę tylko upewnić się, że coś zostanie wybrane (przy użyciu 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;
}
Jeśli chcesz waniliowy JavaScript, nie zaśmiecaj znaczników, dodając identyfikatory na każdym przycisku opcji, i dbasz tylko o nowoczesne przeglądarki , poniższe funkcjonalne podejście jest dla mnie trochę bardziej gustowne niż pętla 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>
Jeśli żadna z nich nie jest zaznaczona, zwróci undefined(chociaż możesz zmienić powyższą linię, aby zwrócić coś innego, np. Dostaćfalse , możesz zmienić odpowiednią linię powyżej na }).pop() || {value:false}).value;:).
Istnieje również przyszłościowe podejście do wypełniania pól, ponieważ interfejs RadioNodeList powinien ułatwić korzystanie z valuewłaściwości na liście elementów potomnych formularzy radiowych (znajdujących się w powyższym kodzie jako formElement[radioName]), ale wiąże się to z własnymi problemami: Sposób wypełniania RadioNodeList ?
Działa to również, unikając wywoływania identyfikatora elementu, ale wywołując go jako element tablicy.
Poniższy kod opiera się na fakcie, że tablica o nazwie grupa przycisków radiobuttons składa się z elementów przycisków radiobuttonów w tej samej kolejności, w jakiej zostały zadeklarowane w dokumencie 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>
JAVAScript:
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;
}
Podaj przyciski radiowe, tę samą nazwę, ale różne identyfikatory.
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;
}
}