nhấp hoặc thay đổi sự kiện trên radio bằng jquery


86

Tôi có một số radio trong trang của mình và tôi muốn làm điều gì đó khi radio đã chọn thay đổi, tuy nhiên mã không hoạt động trong IE:

$('input:radio').change(...);

Và sau khi googling, mọi người đề xuất sử dụng nhấp chuột để thay thế. Nhưng nó không hoạt động.

Đây là mã ví dụ:

<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
        <script type="text/javascript">
            $('document').ready(
                function(){
                    $('input:radio').click(
                        function(){
                            alert('changed');   
                        }
                    );  
                }
            );

        </script>
    </head>
    <body>
        <input type="radio" name="testGroup" id="test1" />test1<br/>
        <input type="radio" name="testGroup" id="test2" />test2<br/>
        <input type="radio" name="testGroup" id="test3" />test3</br>
    </body>
</html>

Nó cũng không hoạt động trong IE.

Vì vậy, tôi muốn biết những gì đang xảy ra?

Ngoài ra, tôi sợ nếu nó sẽ kích hoạt lại sự kiện thay đổi nếu tôi nhấp vào một đài phát thanh đã chọn?

CẬP NHẬT:

Tôi không thể thêm bình luận, vì vậy tôi trả lời ở đây.

Tôi sử dụng IE8 và liên kết mà Furqan cung cấp cho tôi cũng không hoạt động trong IE8. Tôi không biết tại sao...


1
Bạn đang sử dụng phiên bản IE nào để kiểm tra? Mã của bạn phù hợp với tôi trong IE8. Bạn đúng rằng sự kiện sẽ kích hoạt nếu bạn nhấp vào một đài phát thanh đã chọn. Bạn cần thực hiện kiểm tra mã của mình để tránh điều này.
kgiannakakis

nó làm việc cho tôi, kiểm tra như sau jsfiddle.net/NerXh
Furqan Hameedi

Câu trả lời:


111

Mã này phù hợp với tôi:

$(function(){

    $('input:radio').change(function(){
        alert('changed');   
    });          

});

http://jsfiddle.net/3q29L/


4
Điều này không hiệu quả với tôi khi một đài được nhắm mục tiêu và việc chọn một đài khác khiến đài kia bỏ chọn.
Doug Amos,

1
Ngoại trừ khi hiệu suất là một vấn đề trên một trang có nhiều yếu tố. Trong đó trường hợp sử dụng $('input[type=radio]')thay thế (xem "thêm ghi chú": api.jquery.com/radio-selector )
jemmons

72

Bạn có thể chỉ định thuộc tính name như sau:

$( 'input[name="testGroup"]:radio' ).change(

8
Ít mơ hồ hơn. Thực hành tốt hơn nhiều. +1
Jacks_Gulch

14

Cũng phù hợp với tôi, đây là một giải pháp tốt hơn ::

bản demo fiddle

<form id="myForm">
  <input type="radio" name="radioName" value="1" />one<br />
  <input type="radio" name="radioName" value="2" />two 
</form>

<script>
$('#myForm input[type=radio]').change(function() {       
    alert(this.value);
});
</script>

Bạn phải đảm bảo rằng bạn đã khởi tạo jquerytrên tất cả các hàm nhập và javascript khác. Vì $là một jquerychức năng. Cũng

$(function(){
 <code>
}); 

sẽ không kiểm tra jquerykhởi tạo hay không. Nó sẽ đảm bảo rằng <code>sẽ chỉ chạy sau khi tất cả các javascrip được khởi tạo.


7

Thử

$(document).ready(

thay vì

$('document').ready(

hoặc bạn có thể sử dụng một dạng viết tắt

$(function(){
});

1

$( 'input[name="testGroup"]:radio' ).on('change', function(e) {
     console.log(e.type);
     return false;
});

Cú pháp này linh hoạt hơn một chút để xử lý các sự kiện. Bạn không chỉ có thể quan sát các "thay đổi" mà còn có thể kiểm soát các loại sự kiện khác ở đây bằng cách sử dụng một trình xử lý sự kiện duy nhất. Bạn có thể thực hiện việc này bằng cách chuyển danh sách các sự kiện dưới dạng đối số cho tham số đầu tiên. Xem jQuery On

Thứ hai, .change () là một phím tắt cho .on ("thay đổi", trình xử lý). Xem tại đây . Tôi thích sử dụng .on () hơn là .change vì tôi có nhiều quyền kiểm soát hơn đối với các sự kiện.

Cuối cùng, tôi chỉ đơn giản là hiển thị một cú pháp thay thế để đính kèm sự kiện vào phần tử.


Câu trả lời của Iwao Nishida có hiệu quả như thế nào ?
Tất cả Người lao động đều cần thiết.

nó khác vì nó không sử dụng .change () nhưng .on () Không có lý do gì để phản đối câu trả lời này.
luis
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.