关于javascript:如何通过jquery知道选择了哪个单选按钮?

How can I know which radio button is selected via jQuery?

我有两个单选按钮,希望发布所选按钮的值。如何使用jquery获取值?

我可以像这样得到它们:

1
$("form :radio")

我如何知道选择哪一个?


要获取ID为myForm的表单中所选radioName项的值:

1
$('input[name=radioName]:checked', '#myForm').val()

下面是一个例子:

1
2
3
$('#myForm input').on('change', function() {
   alert($('input[name=radioName]:checked', '#myForm').val());
});
1
2
3
4
5
6
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
<form id="myForm">
  <input type="radio" name="radioName" value="1" /> 1 <br />
  <input type="radio" name="radioName" value="2" /> 2 <br />
  <input type="radio" name="radioName" value="3" /> 3 <br />
</form>


用这个…

1
$("#myform input[type='radio']:checked").val();


如果您已经有了对单选按钮组的引用,例如:

1
var myRadio = $("input[name=myRadio]");

使用filter()功能,而不是find()功能。(find()用于定位子元素/后代元素,而filter()搜索所选内容中的顶级元素。)

1
var checkedValue = myRadio.filter(":checked").val();

注:此答案最初是更正另一个建议使用find()的答案,该答案似乎已被更改。find()对于已经引用了容器元素但没有引用单选按钮的情况仍然有用,例如:

1
2
3
var form = $("#mainForm");
...
var checkedValue = form.find("input[name=myRadio]:checked").val();


这应该有效:

1
$("input[name='radioName']:checked").val()

注意"在输入周围使用:检查而不是",就像Peter J的解决方案一样。


您可以将:选中的选择器与收音机选择器一起使用。

1
 $("form:radio:checked").val();


如果只需要布尔值,即如果选中或不选中,请尝试以下操作:

1
$("#Myradio").is(":checked")

得到所有的收音机:

1
var radios = jQuery("input[type='radio']");

筛选以获取已检查的

1
radios.filter(":checked")

另一个选择是:

1
$('input[name=radioName]:checked').val()


1
$("input:radio:checked").val();


以下是我如何填写表格和处理检查过的收音机的获取。

使用名为MyForm的表单:

1
2
3
4
5
<form id='myForm'>
    <input type='radio' name='radio1' class='radio1' value='val1' />
    <input type='radio' name='radio1' class='radio1' value='val2' />
    ...
</form>

从表单中获取值:

1
$('#myForm .radio1:checked').val();

如果您不发布表单,我将使用以下方法进一步简化它:

1
2
<input type='radio' class='radio1' value='val1' />
<input type='radio' class='radio1' value='val2' />

然后,获取选中的值变为:

1
    $('.radio1:checked').val();

在输入上有一个类名允许我轻松地设置输入样式…


在我的例子中,我在一个表单中有两个单选按钮,我想知道每个按钮的状态。以下内容对我很有用:

1
2
3
// get radio buttons value
console.log("radio1:" +  $('input[id=radio1]:checked', '#toggle-form').val() );
console.log("radio2:" +  $('input[id=radio2]:checked', '#toggle-form').val() );
1
2
3
4
5
6
7
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
<form id="toggle-form">
 
    <input type="radio" id="radio1" name="radio" checked="checked" /><label for="radio1">Plot single</label>
    <input type="radio" id="radio2" name="radio"/><label for="radio2">Plot all</label>
 
</form>


在JSF生成的单选按钮(使用标记)中,可以执行以下操作:

1
radiobuttonvalue = jQuery("input[name='form_id\:radiobutton_id']:checked").val();

其中selectoneradio id是radiobutton_id,form id是form_id。

如图所示,请务必使用name而不是id,因为jquery使用此属性(名称由类似于control id的JSF自动生成)。


我编写了一个jquery插件,用于设置和获取单选按钮值。它也尊重他们身上的"改变"事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(function ($) {

    function changeRadioButton(element, value) {
        var name = $(element).attr("name");
        $("[type=radio][name=" + name +"]:checked").removeAttr("checked");
        $("[type=radio][name=" + name +"][value=" + value +"]").attr("checked","checked");
        $("[type=radio][name=" + name +"]:checked").change();
    }

    function getRadioButton(element) {
        var name = $(element).attr("name");
        return $("[type=radio][name=" + name +"]:checked").attr("value");
    }

    var originalVal = $.fn.val;
    $.fn.val = function(value) {

        //is it a radio button? treat it differently.
        if($(this).is("[type=radio]")) {

            if (typeof value != 'undefined') {

                //setter
                changeRadioButton(this, value);
                return $(this);

            } else {

                //getter
                return getRadioButton(this);

            }

        } else {

            //it wasn't a radio button - let's call the default val function.
            if (typeof value != 'undefined') {
                return originalVal.call(this, value);
            } else {
                return originalVal.call(this);
            }

        }
    };
})(jQuery);

将代码放在任何位置以启用加载项。然后享受!它只是在不破坏任何内容的情况下覆盖默认的val函数。

您可以访问这个JSfiddle来尝试它的实际操作,并了解它是如何工作的。

小提琴


如果您有多个单一窗体的单选按钮,则

1
2
3
4
5
var myRadio1 = $('input[name=radioButtonName1]');
var value1 = myRadio1.filter(':checked').val();

var myRadio2 = $('input[name=radioButtonName2]');
var value2 = myRadio2.filter(':checked').val();

这对我有用。


另外,检查用户是否没有选择任何内容。

1
2
3
4
var radioanswer = 'none';
if ($('input[name=myRadio]:checked').val() != null) {          
   radioanswer = $('input[name=myRadio]:checked').val();
}

这很好

1
$('input[type="radio"][class="className"]:checked').val()

工作演示

:checked选择器用于checkboxesradio buttons和select元素。仅对select元素使用:selected选择器。

:checked Selector的API


1
2
3
 $(".Stat").click(function () {
     var rdbVal1 = $("input[name$=S]:checked").val();
 }

要获取使用类的选定收音机的值,请执行以下操作:

1
$('.class:checked').val()

使用此:

1
value = $('input[name=button-name]:checked').val();


我用这个简单的脚本

1
2
3
4
$('input[name="myRadio"]').on('change', function() {
  var radioValue = $('input[name="myRadio"]:checked').val();        
  alert(radioValue);
});


演示:https://jsfiddle.net/ipsjolly/xygr065w/

1
2
3
4
5
    $(function(){
        $("#submit").click(function(){      
            alert($('input:radio:checked').val());
        });
     });
1
2
3
4
5
6
7
8
9
10
11
12
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
<table>
       <tr>
         <td>Sales Promotion</td>
         <td><input type="radio" name="q12_3" value="1">1</td>
         <td><input type="radio" name="q12_3" value="2">2</td>
         <td><input type="radio" name="q12_3" value="3">3</td>
         <td><input type="radio" name="q12_3" value="4">4</td>
         <td><input type="radio" name="q12_3" value="5">5</td>
      </tr>
    </table>
<button id="submit">submit</button>


如果一个表单上只有一组单选按钮,jquery代码就这么简单:

1
$("input:checked" ).val()

我已经发布了一个库来帮助解决这个问题。实际上,拉取所有可能的输入值,但也包括选中的单选按钮。你可以在https://github.com/mazondo/formezedata上查看。

它会给你一个JS对象的答案,这样一个表单:

1
2
3
4
<form>
<input type="radio" name"favorite-color" value="blue" checked> Blue
<input type="radio" name="favorite-color" value="red"> Red
</form>

会给你:

1
2
3
4
$("form").formalizeData()
{
 "favorite-color" :"blue"
}

要检索javascript数组中的所有单选按钮值,请使用以下jquery代码:

1
2
3
var values = jQuery('input:checkbox:checked.group1').map(function () {
    return this.value;
}).get();


试试看——

1
2
3
var radioVal = $("#myform").find("input[type='radio']:checked").val();

console.log(radioVal);

另一种方法是:

1
2
3
4
5
 $("#myForm input[type=radio]").on("change",function(){
   if(this.checked) {
    alert(this.value);
    }
  });
1
2
3
4
5
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
<form id="myForm">
   <span><input type="radio" name="q12_3" value="1">1</span>
   <span><input type="radio" name="q12_3" value="2">2</span>
</form>


在这个问题上,我想出了一个替代方法,当您在click事件中为其各自的标签访问当前选定的input。原因是,新选择的input在其label的Click事件之后才更新。

DR

1
2
3
4
5
$('label').click(function() {
  var selected = $('#' + $(this).attr('for')).val();

  ...
});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$(function() {
  // this outright does not work properly as explained above
  $('#reported label').click(function() {
    var query = $('input[name="filter"]:checked').val();
    var time = (new Date()).toString();

    $('.query[data-method="click event"]').html(query + ' at ' + time);
  });

  // this works, but fails to update when same label is clicked consecutively
  $('#reported input[name="filter"]').on('change', function() {
    var query = $('input[name="filter"]:checked').val();
    var time = (new Date()).toString();

    $('.query[data-method="change event"]').html(query + ' at ' + time);
  });

  // here is the solution I came up with
  $('#reported label').click(function() {
    var query = $('#' + $(this).attr('for')).val();
    var time = (new Date()).toString();

    $('.query[data-method="click event with this"]').html(query + ' at ' + time);
  });
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
input[name="filter"] {
  display: none;
}
#reported label {
  background-color: #ccc;
  padding: 5px;
  margin: 5px;
  border-radius: 5px;
  cursor: pointer;
}
.query {
  padding: 5px;
  margin: 5px;
}
.query:before {
  content:"on" attr(data-method)":";
}
[data-method="click event"] {
  color: red;
}
[data-method="change event"] {
  color: #cc0;
}
[data-method="click event with this"] {
  color: green;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
<form id="reported">
  <input type="radio" name="filter" id="question" value="questions" checked="checked">
  <label for="question">Questions</label>

  <input type="radio" name="filter" id="answer" value="answers">
  <label for="answer">Answers</label>

  <input type="radio" name="filter" id="comment" value="comments">
  <label for="comment">Comments</label>

  <input type="radio" name="filter" id="user" value="users">
  <label for="user">Users</label>

  <input type="radio" name="filter" id="company" value="companies">
  <label for="company">Companies</label>

 
 
 
</form>


1
2
3
4
5
6
7
8
9
10
$(function () {
// Someone has clicked one of the radio buttons
var myform= 'form.myform';
$(myform).click(function () {
    var radValue="";
    $(this).find('input[type=radio]:checked').each(function () {
        radValue= $(this).val();
    });
  })
});

我需要做的是简化C代码,也就是尽可能在前端JavaScript中完成。我使用的是fieldset容器,因为我在dnn中工作,它有自己的形式。所以我不能添加表单。

我需要测试3个文本框中的哪个文本框正在使用,如果是,搜索类型是什么?从值开始,包含值,与值完全匹配。

HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<fieldset id="fsPartNum" class="form-inline">

    <label for="txtPartNumber">Part Number:</label>
    <input type="text" id="txtPartNumber" class="input-margin-pn" />


    <label for="radPNStartsWith">Starts With: </label>
    <input type="radio" id="radPNStartsWith" name="partNumber" checked  value="StartsWith"/>


    <label for="radPNContains">Contains: </label>
    <input type="radio" id="radPNContains" name="partNumber" value="Contains" />


    <label for="radPNExactMatch">Exact Match: </label>
    <input type="radio" id="radPNExactMatch" name="partNumber" value="ExactMatch" />

我的javascript是:

1
2
3
4
5
6
7
8
9
10
        alert($('input[name=partNumber]:checked', '#fsPartNum').val());
    if(txtPartNumber.val() !== ''){
        message = 'Customer Part Number';
    }
    else if(txtCommercialPartNumber.val() !== ''){

    }
    else if(txtDescription.val() !== ''){

    }

只需说任何包含ID的标记都可以使用。对于dnner来说,这是很好的了解。这里的最终目标是将在SQL Server中启动部件搜索所需的代码传递给中级代码。

这样我就不必再复制更复杂的C代码了。这里正在进行重物提升。

我得找一点这个,然后修补它,使它工作。所以对于其他dnner,希望这很容易找到。


jquery获取表单中的所有单选按钮和选中的值。

1
2
3
4
$.each($("input[type='radio']").filter(":checked"), function () {
  console.log("Name:" + this.name);
  console.log("Value:" + $(this).val());
});

这个怎么样?

使用更改并获取无线电类型的值是选中的…

1
2
3
$('#my-radio-form').on('change', function() {
  console.log($('[type="radio"]:checked').val());
});
1
2
3
4
5
6
7
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js">
<form id="my-radio-form">
  <input type="radio" name="input-radio" value="a" />a
  <input type="radio" name="input-radio" value="b" />b
  <input type="radio" name="input-radio" value="c" />c
  <input type="radio" name="input-radio" value="d" />d
</form>


您需要使用:checked选择器访问:

检查此文档:

  • https://api.jquery.com/checked-selector/

一个例子:

1
2
3
4
$('input[name=radioName]:checked', '#myForm').val()
$('#myForm input').on('change', function() {
    $('#val').text($('input[name=radioName]:checked', '#myForm').val());
});
1
2
3
4
#val {
  color: #EB0054;
  font-size: 1.5em;
}
1
2
3
4
5
6
7
8
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

Radio value: <span id='val'><span>
<form id="myForm">
  <input type="radio" name="radioName" value="a"> a
  <input type="radio" name="radioName" value="b"> b
  <input type="radio" name="radioName" value="c"> c
</form>


可以调用函数onchange()。

1
2
3
4
5
6
7
8
  <input type="radio" name="radioName" value="1" onchange="radio_changed($(this).val())" /> 1 <br />
  <input type="radio" name="radioName" value="2" onchange="radio_changed($(this).val())"  /> 2 <br />
  <input type="radio" name="radioName" value="3"  onchange="radio_changed($(this).val())" /> 3 <br />


function radio_changed(val){
    alert(val);
}