2012-06-08 26 views
6

Tôi có một nhóm các nút radio có cùng tên, nhưng các giá trị khác nhau. Tôi muốn làm điều gì đó như:Cách nhận lại cuộc gọi lại trên các nút radio, nhưng chỉ một nút đã được SET

$("#langs").on("change", "[name=locale]", myfunction); 

này hoạt động, nhưng khi tôi bấm vào một nút radio myfunction mới được gọi hai lần: một lần cho nút radio "cũ" mà được tự động nhận được kiểm soát, và một lần cho cái mới tôi đang nhấp vào.

thay đổi onchange thành onclick không phải là giải pháp, bởi vì tôi sử dụng nó với jquery-mobile và nó kết thúc tốt đẹp các đầu vào có nhãn, vì vậy nhãn được nhấp, chứ không phải đầu vào.

Trả lời

6

Bạn có thể vượt qua $(this) như một cuộc tranh cãi để myfunction và sau đó bên myfunction kiểm tra nếu nút radio được kiểm tra

$("#langs").on("change", "[name=locale]", function() { myfunction($(this)); });

function myfunction(elem) { 
    if(elem.is(':checked')) { 
     // code here 
    } 
} 
+0

Tôi có thể làm điều gì đó sai, nhưng tôi phải làm $ (elem) .is (': checked') để làm việc này – w4ik

0

Theo như tôi biết, bạn không có bất kỳ hạn chế nào khi sử dụng sự kiện onclick với jquery trong nhãn. Nếu bạn có id, bạn có thể sử dụng nó. Hãy nói rằng bạn có html sau:

<label for="foo" id="whatever1">foo</label><input type="radio" name="radiogroup_0" value="foo" > 
<label for="bar" id="whatever2">bar</label><input type="radio" name="radiogroup_1" value="bar" > 

Trong bạn JQuery bạn có thể thêm:

$('#whatever1').click(
    function(){ 
    //paste your code inside 
    } 
); 

Tương tự cho các nút radio của nhau nhãn

$('#whatever1').click(
    function(){ 
    //paste your code inside 
    } 
); 

Hope this helps. Luis M.

0

sao bạn không thử một cái gì đó như:

<div data-role="fieldcontain"> 
    <fieldset data-role="controlgroup" data-type="horizontal"> 
    <input type="radio" name="langs" id="first" value="1" onchange="myfunction();"/> 
    <label for="first">First</label> 
    <input type="radio" name="langs" id="second" value="2" onchange="myfunction();"/> 
    <label for="second">Second</label> 
    </fieldset> 
</div> 

Và sau đó:

function myfunction(){ 
    if($("#langs option:selected")){ 
    //do something, for example 
     alert($("#langs option:selected").text()); 
    } 
} 

này nên gọi hàm chỉ một lần vì nó là chứa trong các yếu tố cần sử dụng nó.

6

Điều này làm việc cho bạn? Sau khi jQM Docs

HTML:

<div data-role="page"> 
    <fieldset data-role="controlgroup"> 
     <legend>Choose a language:</legend> 
     <input type="radio" name="langs" id="english-lang" value="en" /> 
     <label for="english-lang">English</label> 
     <input type="radio" name="langs" id="korean-lang" value="ko" /> 
     <label for="korean-lang">Korean</label> 
    </fieldset> 
</div>​ 

JS:

$("input[name=langs]:radio").bind("change", function(event, ui) { 
    console.log('Lang: '+$(this).val()); 

    // Call function here 
}); 
+0

.bind() không được dùng như jQuery 1.7, và phương thức ưa thích cho các sự kiện ràng buộc là .on() (ngay từ tài liệu) . – artamonovdev

Các vấn đề liên quan