선택한 라디오 버튼의 값을 얻는 방법?


264

JS 프로그램에 이상한 문제가 있습니다. 나는 이것이 제대로 작동했지만 어떤 이유로 더 이상 작동하지 않습니다. 라디오 버튼 (선택한 것)의 값을 찾아 변수로 반환하고 싶습니다. 어떤 이유로 그것은 계속 돌아옵니다 undefined.

내 코드는 다음과 같습니다.

function findSelection(field) {
    var test = 'document.theForm.' + field;
    var sizes = test;

    alert(sizes);
        for (i=0; i < sizes.length; i++) {
            if (sizes[i].checked==true) {
            alert(sizes[i].value + ' you got a value');     
            return sizes[i].value;
        }
    }
}

submitForm:

function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
}

HTML :

<form action="#n" name="theForm">

    <label for="gender">Gender: </label>
    <input type="radio" name="genderS" value="1" checked> Male
    <input type="radio" name="genderS" value="0" > Female<br><br>
    <a href="javascript: submitForm()">Search</A>
</form>

답변:


395

다음과 같이 할 수 있습니다 :

var radios = document.getElementsByName('genderS');

for (var i = 0, length = radios.length; i < length; i++) {
  if (radios[i].checked) {
    // do whatever you want with the checked radio
    alert(radios[i].value);

    // only one radio can be logically checked, don't check the rest
    break;
  }
}
<label for="gender">Gender: </label>
<input type="radio" name="genderS" value="1" checked="checked">Male</input>
<input type="radio" name="genderS" value="0">Female</input>

jsfiddle

편집 : 편집 제안에 대해 HATCHA와 jpsetung에게 감사드립니다.


5
그것은 jquery 1.7에서 작동했지만 이제 jQuery 1.9의 올바른 구문은 $ ( 'input [name = "genderS"] : checked'). val (); (@ 제거)
jptsetung 2016 년

1
나는 생각 @구문이 된 그 이전되지 않는 그 (JQuery와 1.2) 이상
톰 Pietrosanti

@TomPietrosanti 문서가 약간 벗어난 것으로 보입니다. jsfiddle.net/Xxxd3/608 은 <1.7.2에서는 작동하지만 1.8.3에서는 작동하지 않습니다. 어쨌든, @제거해야합니다
jbabey

예, 이전 버전과의 호환성을 유지했지만 문서를 일치하도록 업데이트하지 않은 것 같습니다. 그들은 널리 아직 사용 된 몇 가지 사용되지 않는 기능을 떨어 때 자신들이 지원 등을 추가, 그래서 나는 어떤 고리 던지기 놀이를 기억 아마도 그 이유는 ....
톰 Pietrosanti

2
document.querySelector()아마 지금 JavaScript에서 권장되는 접근 방식 일 것입니다.
Dave

335

이것은 모든 탐색기에서 작동합니다.

document.querySelector('input[name="genderS"]:checked').value;

이것은 모든 입력 유형의 값을 얻는 간단한 방법입니다. 또한 jQuery 경로를 포함 하지 않아도됩니다.


23
document.querySelector () 사용은 순수한 자바 스크립트 답변입니다. developer.mozilla.org/en-US/docs/Web/API/document.querySelector
AdamJonR

8
변수를 변수에 저장하고 라디오 버튼을 선택하지 않으면 브라우저가 중지됩니다. 콘솔의 말 : TypeError document.querySelector(...)is null입니다.
call-me

14
하나를 선택한 경우에만 작동합니다. 먼저 확인해야합니다. var selector = document.querySelector('input[name="genderS"]:checked'); if(selector) console.log(selector.value);
Markus Zeller

나는 Meteor에서 템플릿으로 작업하고 있는데, 그 :checked트릭은 나를 위해 그것을 완전히 못 박았다. 나를 위해 Meteor 템플릿 폼에서 라디오 버튼을 읽는 것에 대한 해결책은accountType = template.find("[name='optradio']:checked").value;
zipzit

IE11에서 일관되게 작동하지 않는 엔터프라이즈 환경이 있습니다. 어떤 종류의 하위 호환성 모드입니다.
Steve Black

35
document.forms.your-form-name.elements.radio-button-name.value

5
– 또한 작동합니다 :document.forms.your-form-name.name-shared-by-radio-buttons.value
Web_Designer

7
나는 대부분의 사람들이 이것을 간과하고 있다고 생각합니다. 허용 된 답변이 작동합니다. Giorgos Tsakonas의 답변이 더 좋습니다. 그러나 이것은 근본적으로 정답입니다. 이것은 라디오 버튼이 실제로 작동하는 방식입니다. 아무것도 선택하지 않으면 빈 문자열을 반환합니다.
Mark Goldfain

@Web_Designer 귀하의 의견도 실제 답변이 아니어야합니까?
Ideogram

라디오 입력이 양식이 아닌 경우 작동하지 않으므로 이것이 querySelector 하나보다 더 나은 대답이라고 생각하지 않습니다.이 두 가지가 병합되어야합니다.
Tomáš Hübelbauer

라디오가 라벨 안에 있으면이 방법으로 작동하지 않습니다
Igor Fomenko

19

jQuery 1.8부터 쿼리에 대한 올바른 구문은

$('input[name="genderS"]:checked').val();

$('input[@name="genderS"]:checked').val();더 이상은 아니지만 jQuery 1.7에서 작동했습니다 ( @ 사용 ).


16

ECMAScript 6 버전

let genderS = Array.from(document.getElementsByName("genderS")).find(r => r.checked).value;

16

가장 간단한 해결책 :

 document.querySelector('input[name=genderS]:checked').value

1
다음과 같은 두 가지 이유로 투표에 참여했습니다. 1. 작동합니다. 2. 그것은 절름발이 jquery 답변이 아니었다.
John

21
이것은 @Giorgos Tsakonas의 답변에 대한 정확한 사본입니다.
T Nguyen

7

이 시도

function findSelection(field) {
    var test = document.getElementsByName(field);
    var sizes = test.length;
    alert(sizes);
    for (i=0; i < sizes; i++) {
            if (test[i].checked==true) {
            alert(test[i].value + ' you got a value');     
            return test[i].value;
        }
    }
}


function submitForm() {

    var genderS =  findSelection("genderS");
    alert(genderS);
    return false;
}

여기에 바이올린 .


6

편집 : Chips_100에 따르면 다음을 사용해야합니다.

var sizes = document.theForm[field];

테스트 변수를 사용하지 않고 직접.


오래된 답변 :

당신 eval은 이것을 좋아하지 않습니까?

var sizes = eval(test);

나는 그것이 어떻게 작동하는지 모르지만, 당신은 단지 문자열을 복사하고 있습니다.


여기서 eval이 최선의 선택은 아닙니다 . 더 이상 변수를 var sizes = document.theForm[field];사용하지 않고 첫 번째 할당 을 말하고 삭제할 수 있습니다 test.
Dennis

내 지식으로, 평가판은 그대로 작동합니까? 아니면 작동 eval('var sizes=document.theForm.' + field)합니까?
Michael Laffargue

귀하의 답변에 eval 문은 var sizes = eval(test);그런 식으로 작동합니다 (방화범에서 테스트합니다).
Dennis

더 의미가 있지만 field괄호를 넣은 줄에 "예기치 않은 토큰 ["오류 가 표시됩니다. 이유에 대한 추측?
mkyong

4

이것은 @Fontas의 답변을 기반으로 한 순수한 JavaScript이지만 TypeError선택된 라디오 버튼이 없으면 빈 문자열을 반환하고을 피하는 안전 코드가 있습니다 .

var genderSRadio = document.querySelector("input[name=genderS]:checked");
var genderSValue = genderSRadio ? genderSRadio.value : "";

코드는 다음과 같이 분류됩니다.

  • 1 행 : (a)는 <input>유형이고 (b)는 name속성을 genderS가지며 (c)는 검사 된 컨트롤에 대한 참조를 얻습니다 .
  • 2 행 : 그러한 컨트롤이 있으면 해당 값을 반환하십시오. 없는 경우 빈 문자열을 반환하십시오. genderSRadio변수는 truthy입니다 1 호선 발견 제어 및 널 (null) / falsey 그렇지 않은 경우 경우.

JQuery의 경우 @jbabey의 답변을 사용하고 선택한 라디오 버튼이 없으면이 반환 undefined됩니다.



3

Checked = "checked" 속성이 사용 되지 않은 라디오의 예는 다음과 같습니다.

function test() {
var radios = document.getElementsByName("radiotest");
var found = 1;
for (var i = 0; i < radios.length; i++) {       
    if (radios[i].checked) {
        alert(radios[i].value);
        found = 0;
        break;
    }
}
   if(found == 1)
   {
     alert("Please Select Radio");
   }    
}

데모 : http://jsfiddle.net/ipsjolly/hgdWp/2/ [ 라디오를 선택하지 않고 찾기 클릭 ]

출처 : http://bloggerplugnplay.blogspot.in/2013/01/validateget-checked-radio-value-in.html


2

다음은 일반 자바 스크립트로 확인 된 라디오 버튼의 값을 얻는 좋은 방법입니다.

const form = document.forms.demo;
const checked = form.querySelector('input[name=characters]:checked');

// log out the value from the :checked radio
console.log(checked.value);

출처 : https://ultimatecourses.com/blog/get-value-checked-radio-buttons

이 HTML을 사용하여 :

<form name="demo">
  <label>
    Mario
    <input type="radio" value="mario" name="characters" checked>
  </label>
  <label>
    Luigi
    <input type="radio" value="luigi" name="characters">
  </label>
  <label>
    Toad
    <input type="radio" value="toad" name="characters">
  </label>
</form>

또한 사용 할 수 배열 찾기checked 체크 항목을 찾을 속성을 :

Array.from(form.elements.characters).find(radio => radio.checked);

1

순수한 자바 스크립트를 사용하면 이벤트를 전달한 객체에 대한 참조를 처리 할 수 ​​있습니다.

function (event) {
    console.log(event.target.value);
}

1

각각 별도의 속성 이름 ( 'option1', 'option2'등)을 갖지만 동일한 클래스 이름을 가진 양식에 다른 행의 라디오 단추를 배치해야한다고 가정합니다. 아마도 질문과 관련된 1-5의 척도를 기준으로 값을 제출하는 여러 행으로 구성해야 할 수도 있습니다. 다음과 같이 자바 스크립트를 작성할 수 있습니다.

<script type="text/javascript">

    var ratings = document.getElementsByClassName('ratings'); // we access all our radio buttons elements by class name     
    var radios="";

    var i;
    for(i=0;i<ratings.length;i++){
        ratings[i].onclick=function(){
            var result = 0;
            radios = document.querySelectorAll("input[class=ratings]:checked");
            for(j=0;j<radios.length;j++){
                result =  result + + radios[j].value;
            }
            console.log(result);
            document.getElementById('overall-average-rating').innerHTML = result; // this row displays your total rating
        }
    }
</script>

또한 최종 출력을 숨겨진 양식 요소에 삽입하여 양식과 함께 제출합니다.



0

양식 element ()에 Id를 할당 할 수있는 경우이 방법을 안전한 대체 방법으로 간주 할 수 있습니다 (특히 라디오 그룹 요소 이름이 문서에서 고유하지 않은 경우).

function findSelection(field) {
    var formInputElements = document.getElementById("yourFormId").getElementsByTagName("input");
    alert(formInputElements);
        for (i=0; i < formInputElements.length; i++) {
        if ((formInputElements[i].type == "radio") && (formInputElements[i].name == field) && (formInputElements[i].checked)) {
            alert(formInputElements[i].value + ' you got a value');     
            return formInputElements[i].value;
        }
    }
}

HTML :

<form action="#n" name="theForm" id="yourFormId">

-3
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 1">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 2">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 3">
 <input type=radio name=rdbExampleInfo id=rdbExamples value="select 4"> 

그런 다음 그냥 사용하십시오

  $("#rdbExamples:checked").val()

또는

   $('input[name="rdbExampleInfo"]:checked').val();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.