2009-07-17 45 views
10

Tôi đang viết một ứng dụng bài kiểm tra bằng cách sử dụng php/jquery. Các lựa chọn câu trả lời được chứa như sau:Kiểm tra nút radio khi nhấp vào DIV

<ul id="answers"> 
    <li> 
     <div> 
     <input type='radio' name='answer_id' value='313'> True 
     </div> 
    </li> 
    <li> 
     <div> 
     <input type='radio' name='answer_id' value='314'> False 
     </div> 
    </li> 
</ul> 

Sau khi được định dạng w/css, các câu trả lời này xuất hiện trong một vùng chứa có một câu trả lời trên mỗi dòng. Mỗi câu trả lời đều có hộp riêng trong hộp chứa. Tôi muốn người dùng có thể nhấp vào bất kỳ nơi nào trong div câu trả lời riêng lẻ và chọn radio chọn trở thành kiểm tra.

Làm cách nào để kích hoạt nút radio khi người dùng nhấp vào div vùng chứa của nút radio, sử dụng jquery?

+1

câu hỏi liên quan http://stackoverflow.com/questions/972366/jquery-focus-function-not-working-in-firefox/ –

Trả lời

25

Thay vì sử dụng jQuery, tất cả điều này có thể được thực hiện trong HTML gốc bằng cách sử dụng phần tử <label>. Here is a sample hoạt động.

<ul id="answers"> 
     <li> 
       <label> 
        <input type='radio' name='answer_id' value='313'> True 
       </label> 
     </li> 
     <li> 
       <label> 
        <input type='radio' name='answer_id' value='314'> False 
       </label> 
     </li> 
</ul> 
+0

perrrrfect. cảm ơn bạn. – Ian

0

có lẽ cái gì đó như:

$('#answers li div').click(function(){ 

    var r = $(this).find('input[type=radio]'); 
    if($(r).is(":checked")) 
    { 
    $(r).attr("checked", ""); 
    } 
    else 
    { 
    $(r).attr("checked", "checked"); 
    } 

}); 
2

chỉnh việc sử dụng thẻ nhãn là:

<input type="checkbox" id="checkme" name="checkme" /> <label for="checkme">Toggle this checkbox on/off</label> 

cho = "..." luôn luôn làm cho tham chiếu đến id của đầu vào.

1

Tôi đồng ý với tj111, nhưng nếu không phải lúc nào cũng phù hợp với:

  • Khó khăn hơn để phong cách.
  • nhãn chỉ làm việc nếu có văn bản trong họ (nhờ Michael)

Đây là mã thay thế sử dụng div và jQuery:

$('input:radio').click(ev){ 
    ev.stopPropagation(); 
}).parent().click(function(ev){ 
    ev.preventDefault(); 
    $(this).children('input').click(); 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 

Với lớp "hoạt động" bây giờ bạn thậm chí có thể che giấu radio và sử dụng bảng định kiểu để làm nổi bật.

+0

Đó là ... thú vị. Làm thế nào về: $ ('đầu vào: radio'). Click (function (ev) {ev.stopPropagation();}). Parent(). Click (function (ev) {ev.preventDefault(); $ (this). trẻ em ('đầu vào'). click();}); –

+0

Tôi thấy rằng các nhãn chỉ hoạt động khi có văn bản (hoặc một số lượng lớn khoảng trắng) có sẵn để nhấp. Ngược lại, việc đặt nhấp chuột vào nút gốc sẽ làm tăng tốc độ nhấp chuột trên radio thực tế. Làm lại mã romaninsh giải quyết vấn đề của tôi –

+1

Cảm ơn, tôi đã cập nhật câu trả lời của tôi để phản ánh những phát hiện của bạn. – romaninsh

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