Trong jQuery, làm cách nào để chọn một phần tử theo thuộc tính tên của nó?


327

Tôi có 3 nút radio trong trang web của mình, như bên dưới:

<label for="theme-grey">
  <input type="radio" id="theme-grey" name="theme" value="grey" />Grey</label>
<label for="theme-pink">
  <input type="radio" id="theme-pink" name="theme" value="pink" />Pink</label>
<label for="theme-green">
  <input type="radio" id="theme-green" name="theme" value="green" />Green</label>

Trong jQuery, tôi muốn lấy giá trị của nút radio đã chọn khi bất kỳ một trong ba nút này được nhấp. Trong jQuery, chúng ta có các bộ chọn id (#) và class (.), Nhưng nếu tôi muốn tìm một nút radio theo tên của nó, như dưới đây thì sao?

$("<radiobutton name attribute>").click(function(){});

Xin vui lòng cho tôi biết làm thế nào để giải quyết vấn đề này.


5
bạn không nhất thiết phải chỉ định thuộc tính 'cho', miễn là các trường được bao gồm giữa các thẻ 'nhãn' tương ứng của chúng
Lucius

2
jQuery 1.8 trở lên thay đổi điều này .... Tôi đã thêm một câu trả lời bên dưới giải thích.
Kevin LaBranche

3
Câu trả lời của A1rPun là tốt nhất: một phần mềm không phải là jQuery!
Rudey

1
Đã sử dụng nút radio để duy trì trạng thái trong ứng dụng js của tôi. Gỡ lỗi trong một giờ trước khi kiểm tra chủ đề này. Hãy xem cái này
Prasanth

Trong đơn giản JS:document.querySelectorAll("input:radio[name=theme]").forEach(function() { this.onclick=function() { var value = this.value; }; });
mplungjan

Câu trả lời:


338

Điều này nên làm điều đó, tất cả những điều này đều có trong tài liệu , trong đó có một ví dụ rất giống với điều này:

$("input[type='radio'][name='theme']").click(function() {
    var value = $(this).val();
});

Tôi cũng cần lưu ý rằng bạn có nhiều ID giống hệt nhau trong đoạn trích đó. Đây là HTML không hợp lệ. Sử dụng các lớp để nhóm các thành phần, không phải ID, vì chúng phải là duy nhất.


4
@gargantaun - Nếu bạn nhấp vào nút radio, điều gì xảy ra với nó?
Paolo Bergantino

11
Điểm tốt. Mặc dù đó vẫn không phải là "Làm thế nào để có được giá trị radiobutton được chọn bằng tên của nó trong jQuery?". Đó là "Cách nhận giá trị radiobutton đã chọn khi nhấp vào nó bằng jQuery?". Một sự khác biệt nhỏ, nhưng một điều làm tôi bối rối một chút.
gargantuan

1
Theo câu hỏi câu trả lời này là chính xác. trong cái nhìn toàn cầu, chúng tôi đi cho câu trả lời của clayton.
KR

8
Kể từ jQuery 1.8, sử dụng [type='radio']thay vì :radiocách đó, jQuery có thể tận dụng lợi thế tăng hiệu suất được cung cấp bởi querySelectorAll()phương thức DOM gốc .
Adam

2
Câu trả lời @PaoloBergantino đúng 100% vì nó trả về giá trị sau khi nhấp vào nút radio mong muốn. Câu trả lời của Clayton Rabenda không đưa ra điều này.
Azam Alvi

185

Để xác định nút radio nào được chọn, hãy thử điều này:

$('input:radio[name=theme]').click(function() {
  var val = $('input:radio[name=theme]:checked').val();
});

Sự kiện sẽ được bắt cho tất cả các nút radio trong nhóm và giá trị của nút đã chọn sẽ được đặt trong val.

Cập nhật: Sau khi đăng bài, tôi đã quyết định rằng câu trả lời của Paolo ở trên là tốt hơn, vì nó sử dụng một giao dịch DOM ít hơn. Tôi đang để câu trả lời này đứng vững vì nó chỉ ra cách lấy phần tử được chọn theo cách tương thích với nhiều trình duyệt.


3
Cơ sở don làm thế nào tôi ĐỌC câu hỏi, đây là câu trả lời tôi cần. : kiểm tra là những gì tôi đã thiếu trong phương trình của tôi. Cảm ơn.
HPWD

9
Kể từ jQuery 1.8, sử dụng [type='radio']thay vì :radiocách đó, jQuery có thể tận dụng lợi thế tăng hiệu suất được cung cấp bởi querySelectorAll()phương thức DOM gốc .
Adam

Tôi đã cho một khoảng trống sau dấu hai chấm và trước khi "kiểm tra" do nhầm lẫn. Vì vậy, hãy chắc chắn rằng không có không gian.
Khỉ hút thuốc

Một câu trả lời hữu ích cho những người không muốn nhận giá trị từ trình xử lý sự kiện nhấp chuột. Mặt khác, bạn phải sử dụng :checkedđể tìm nút nào được chọn, ví dụ, với trình xử lý sự kiện biểu mẫu trong đó thistừ khóa không ánh xạ tới nút được nhấp.
che-azeh

155
$('input:radio[name=theme]:checked').val();

Tôi đã tiếp tục đơn giản với $("input[name=theme]:checked").val();(bỏ :radiophần đó ra và nó có vẻ hoạt động tốt trong IE, FF, Safari và Chrome. Tôi đã phải làm việc với jQ v 1.3 ... Tất nhiên, điều đó có nghĩa là chỉ có một yếu tố có tên là 'chủ đề'
gian 54

2
Đây là câu trả lời tốt nhất IMO, nó nói "hãy cho tôi biết giá trị của đài CHECKED với tên NÀY". Không cần cho sự kiện, vv
ProVega

39

cách khác

$('input:radio[name=theme]').filter(":checked").val()

1
Điều này rất hữu ích nếu bạn muốn lấy giá trị +1
hoán đổi

Đây là rắn vì bạn có thể sử dụng một biến để giữ các nút radio, ví dụ như $themeRadios = $('input:radio[name=theme'])để thiết lập bất cứ xử lý sự kiện và sau đó nhận được giá trị bằng cách sử dụng bộ lọc, ví dụ $themeRadios.filter(":checked").val().
Joshua Pinter

Tôi thích giải pháp này.
Abel

20

Điều này làm việc tuyệt vời cho tôi. Ví dụ: bạn có hai nút radio có cùng "tên" và bạn chỉ muốn nhận giá trị của nút đã chọn. Bạn có thể thử cái này

$valueOfTheCheckedRadio = $('[name=radioName]:checked').val();

Lý do câu trả lời này tốt hơn câu trả lời nâng cấp hơn 230+ hiện được chấp nhận là vì câu trả lời này cũng chiếm khi người dùng tương tác với nút radio bằng bàn phím.
gmeben

16

Đoạn mã sau được sử dụng để lấy giá trị nút radio đã chọn theo tên

jQuery("input:radio[name=theme]:checked").val();

Cảm ơn Ad Nam


hmm .. tôi đã không sửa định dạng mã của bạn trong câu trả lời cuối cùng của bạn? Hãy tự chăm sóc nó :-)
kleopatra

13

Tôi đã tìm thấy câu hỏi này khi tôi đang nghiên cứu một lỗi sau khi tôi nâng cấp từ 1.7.2 của jQuery lên 1.8.2. Tôi đang thêm câu trả lời của mình vì đã có một thay đổi trong jQuery 1.8 và cao hơn là thay đổi cách trả lời câu hỏi này ngay bây giờ.

Với jQuery 1.8, họ đã loại bỏ các bộ chọn giả như: radio ,: hộp kiểm ,: văn bản.

Để làm như trên bây giờ chỉ cần thay thế :radiobằng [type=radio].

Vì vậy, câu trả lời của bạn bây giờ trở thành cho tất cả các phiên bản jQuery 1.8 trở lên:

$("input[type=radio][name=theme]").click(function() { 
    var value = $(this).val(); 
}); 

Bạn có thể đọc về thay đổi trên 1.8 readmevé cụ thể cho thay đổi này cũng như hiểu lý do tại sao trên trang : bộ chọn radio trong phần Thông tin bổ sung.


5
: kiểm tra không được phản đối. Vì vậy, bạn có thể sử dụng$("input[type='radio'][name='theme']:checked")
Adam

12

Đối với bất cứ ai không muốn bao gồm một thư viện để làm một cái gì đó thực sự đơn giản:

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

jsfiddle

Để biết tổng quan về hiệu suất của các câu trả lời hiện tại, hãy kiểm tra tại đây


1
Cảm ơn câu trả lời này. Bởi vì tôi không thể có được câu trả lời được chấp nhận để làm việc dưới mọi hình thức.
Chris Holmes

9

Nếu bạn muốn biết giá trị của nút radio được chọn mặc định trước một sự kiện nhấp chuột, hãy thử điều này:

alert ($ ("đầu vào: radio: đã kiểm tra"). val ());

6

Bạn có thể sử dụng chức năng lọc nếu bạn có nhiều nhóm radio trên trang, như bên dưới

$('input[type=radio]').change(function(){
    var value = $(this).filter(':checked' ).val();
    alert(value);
});

Đây là url fiddle

http://jsfiddle.net/h6ye7/67/


4
<input type="radio" name="ans3" value="help"> 
<input type="radio" name="ans3" value="help1">
<input type="radio" name="ans3" value="help2">

<input type="radio" name="ans2" value="test"> 
<input type="radio" name="ans2" value="test1">
<input type="radio" name="ans2" value="test2">

<script type="text/javascript">
  var ans3 = jq("input[name='ans3']:checked").val()
  var ans2 = jq("input[name='ans2']:checked").val()
</script>

4

Nếu bạn muốn một giá trị đúng / sai, hãy sử dụng giá trị này:

  $("input:radio[name=theme]").is(":checked")

3

Một cái gì đó như thế này có thể?

$("input:radio[name=theme]").click(function() { 
 ...
}); 

Khi bạn nhấp vào bất kỳ nút radio nào, tôi tin rằng nó sẽ được chọn, vì vậy điều này sẽ được gọi cho nút radio đã chọn.


1
@ Không hợp lệ kể từ jQuery 1.3 (không dùng nữa trước đó, thậm chí). blog.jquery.com/2009/01/05/help-test-jquery-13-beta-2 "Bộ chọn thuộc tính kiểu cũ, XPath, kiểu: [@ attr = value]. Chúng đã bị từ chối khá lâu - và chúng tôi Cuối cùng cũng gỡ bỏ chúng. Để khắc phục, chỉ cần xóa @! "
tay đua

3

Tôi có nhiều nhóm nút radio trên cùng một trang, bạn cũng có thể thử điều này để nhận giá trị của nút radio:

$("input:radio[type=radio]").click(function() {
    var value = $(this).val();
    alert(value);
});

Chúc mừng!


2

cũng có thể sử dụng lớp CSS để xác định phạm vi các nút radio và sau đó sử dụng các mục sau để xác định giá trị

$('.radio_check:checked').val()

1

Điều này làm việc cho tôi ..

HTML:

<input type="radio" class="radioClass" name="radioName" value="1" />Test<br/>
<input type="radio" class="radioClass" name="radioName" value="2" />Practice<br/>
<input type="radio" class="radioClass" name="radioName" value="3" />Both<br/>

Câu hỏi:

    $ (". radioClass"). mỗi (hàm () {
        if ($ (này) .is (': đã kiểm tra'))
        cảnh báo ($ (này) .val ());
    });

Hy vọng nó giúp..


0
$('input:radio[name=theme]').bind(
  'click',
  function(){
    $(this).val();
});

0

Bạn có thể nhận thấy bằng cách sử dụng bộ chọn lớp để nhận giá trị của các ASP.NET RadioButtonđiều khiển luôn trống và đây là lý do.

Bạn tạo RadioButtonđiều khiển ASP.NETnhư dưới đây:

<asp:RadioButton runat="server" ID="rbSingle" GroupName="Type" CssClass="radios" Text="Single" />
<asp:RadioButton runat="server" ID="rbDouble" GroupName="Type" CssClass="radios" Text="Double" />
<asp:RadioButton runat="server" ID="rbTriple" GroupName="Type" CssClass="radios" Text="Triple" />

ASP.NETkết xuất lại HTML sau cho bạnRadioButton

<span class="radios"><input id="Content_rbSingle" type="radio" name="ctl00$Content$Type" value="rbSingle" /><label for="Content_rbSingle">Single</label></span>
<span class="radios"><input id="Content_rbDouble" type="radio" name="ctl00$Content$Type" value="rbDouble" /><label for="Content_rbDouble">Double</label></span>
<span class="radios"><input id="Content_rbTriple" type="radio" name="ctl00$Content$Type" value="rbTriple" /><label for="Content_rbTriple">Triple</label></span>

ASP.NETchúng tôi không muốn sử dụng RadioButtontên hoặc id kiểm soát vì chúng có thể thay đổi vì bất kỳ lý do nào ngoài tầm tay của người dùng (thay đổi tên container, tên biểu mẫu, tên người dùng, ...) như bạn có thể thấy trong mã ở trên.

Cách khả thi duy nhất còn lại để nhận giá trị của việc RadioButtonsử dụng jQuery là sử dụng lớp css như được đề cập trong câu trả lời này cho một câu hỏi hoàn toàn không liên quan như sau

$('span.radios input:radio').click(function() {
    var value = $(this).val();
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.