Jquery Nếu nút radio được chọn


149

Có thể trùng lặp:
Kiểm tra nút radio cụ thể được chọn

Tôi có 2 nút radio này vào lúc này để người dùng có thể quyết định xem họ có cần bưu chính bao gồm trong giá hay không:

<input type="radio" id="postageyes" name="postage" value="Yes" /> Yes
<input type="radio" id="postageno" name="postage" value="No" /> No

Tôi cần sử dụng Jquery để kiểm tra xem nút radio 'có' đã được chọn chưa và nếu có, hãy thực hiện chức năng chắp thêm. Ai đó có thể cho tôi biết làm thế nào tôi làm điều này xin vui lòng?

Cảm ơn vì bất kì sự giúp đỡ

biên tập:

Tôi đã cập nhật mã của mình vào đây, nhưng nó không hoạt động. Tôi có làm điều gì sai?

<script type='text/javascript'>
// <![CDATA[
jQuery(document).ready(function(){

$('input:radio[name="postage"]').change(function(){
    if($(this).val() == 'Yes'){
       alert("test");
    }
});

});

// ]]>
</script>

1
@Daniel H: Trên bản cập nhật của bạn: nó hoạt động tốt !
Shef

Điều đó thật lạ, nó chỉ không hoạt động trên trang web của tôi. Ít nhất tôi biết mã là đúng, tôi sẽ cố gắng tìm ra cái gì sai với nó, cảm ơn vì tất cả các câu trả lời!
Daniel H

Câu trả lời:


284
$('input:radio[name="postage"]').change(
    function(){
        if ($(this).is(':checked') && $(this).val() == 'Yes') {
            // append goes here
        }
    });

Hoặc, ở trên - một lần nữa - sử dụng một ít jQuery không cần thiết:

$('input:radio[name="postage"]').change(
    function(){
        if (this.checked && this.value == 'Yes') {
            // note that, as per comments, the 'changed'
            // <input> will *always* be checked, as the change
            // event only fires on checking an <input>, not
            // on un-checking it.
            // append goes here
        }
    });

Đã sửa đổi (cải thiện một số) jQuery:

// defines a div element with the text "You're appendin'!"
// assigns that div to the variable 'appended'
var appended = $('<div />').text("You're appendin'!");

// assigns the 'id' of "appended" to the 'appended' element
appended.id = 'appended';

// 1. selects '<input type="radio" />' elements with the 'name' attribute of 'postage'
// 2. assigns the onChange/onchange event handler
$('input:radio[name="postage"]').change(
    function(){

        // checks that the clicked radio button is the one of value 'Yes'
        // the value of the element is the one that's checked (as noted by @shef in comments)
        if ($(this).val() == 'Yes') {

            // appends the 'appended' element to the 'body' tag
            $(appended).appendTo('body');
        }
        else {

            // if it's the 'No' button removes the 'appended' element.
            $(appended).remove();
        }
    });

Bản demo của Fiddle .

Và hơn nữa, một bản cập nhật nhẹ (vì tôi đã chỉnh sửa để bao gồm Snippets cũng như các liên kết JS Fiddle), để bọc các <input />phần tử bằng <label>s - cho phép nhấp vào văn bản để cập nhật liên quan <input />- và thay đổi phương tiện tạo nội dung để nối thêm:

var appended = $('<div />', {
  'id': 'appended',
  'text': 'Appended content'
});
$('input:radio[name="postage"]').change(function() {
  if ($(this).val() == 'Yes') {
    $(appended).appendTo('body');
  } else {
    $(appended).remove();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
  <input type="radio" id="postageyes" name="postage" value="Yes" />Yes</label>
<label>
  <input type="radio" id="postageno" name="postage" value="No" />No</label>

Bản demo của Fiddle .

Ngoài ra, nếu bạn chỉ cần hiển thị nội dung tùy thuộc vào yếu tố nào được người dùng kiểm tra, một bản cập nhật nhỏ sẽ chuyển đổi khả năng hiển thị bằng cách sử dụng hiển thị / ẩn rõ ràng:

// caching a reference to the dependant/conditional content:
var conditionalContent = $('#conditional'),
    // caching a reference to the group of inputs, since we're using that
    // same group twice:
    group = $('input[type=radio][name=postage]');

// binding the change event-handler:
group.change(function() {
  // toggling the visibility of the conditionalContent, which will
  // be shown if the assessment returns true and hidden otherwise:
  conditionalContent.toggle(group.filter(':checked').val() === 'Yes');
  // triggering the change event on the group, to appropriately show/hide
  // the conditionalContent on page-load/DOM-ready:
}).change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
  <input type="radio" id="postageyes" name="postage" value="Yes" />Yes</label>
<label>
  <input type="radio" id="postageno" name="postage" value="No" />No</label>
<div id="conditional">
  <p>This should only show when the 'Yes' radio &lt;input&gt; element is checked.</p>
</div>

Và cuối cùng, chỉ sử dụng CSS:

/* setting the default of the conditionally-displayed content
to hidden: */
#conditional {
  display: none;
}

/* if the #postageyes element is checked then the general sibling of
that element, with the id of 'conditional', will be shown: */
#postageyes:checked ~ #conditional {
  display: block;
}
<!-- note that the <input> elements are now not wrapped in the <label> elements,
in order that the #conditional element is a (subsequent) sibling of the radio
<input> elements: -->
<input type="radio" id="postageyes" name="postage" value="Yes" />
<label for="postageyes">Yes</label>
<input type="radio" id="postageno" name="postage" value="No" />
<label for="postageno">No</label>
<div id="conditional">
  <p>This should only show when the 'Yes' radio &lt;input&gt; element is checked.</p>
</div>

Bản demo của Fiddle .

Người giới thiệu:


3
Không cần phải xem nếu nó được kiểm tra hay không. Nó sẽ không bao giờ có giá trị khác. Lãng phí tài nguyên!
Shef

22

Thử cái này

if($("input:radio[name=postage]").is(":checked")){
  //Code to append goes here
}

12

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

if($('#postageyes').is(':checked')) {
// do stuff
}

3
Đối tượng jQuery luôn luôn trung thực. Bạn có thể muốn sử dụng $(...).lengththay thế.
pimvdb

Bạn có ý nghĩa #postageyes:checkedhay $('#postageyes').is(':checked')?
Shef

@pimvdb Theo các tài liệu jQuery,is() trả về một boolean. Vì vậy, cuộc gọi .length()bị hỏng. Từ các tài liệu: "Không giống như các phương thức lọc khác, .is () không tạo đối tượng jQuery mới. Thay vào đó, nó cho phép bạn kiểm tra nội dung của đối tượng jQuery mà không cần sửa đổi." - api.jquery.com/is
Asaph

7
$('input:radio[name="postage"]').change(function(){
    if($(this).val() === 'Yes'){
       // append stuff
    }
});

Điều này sẽ lắng nghe một sự kiện thay đổi trên các nút radio. Tại thời điểm người dùng nhấp chuột Yes, sự kiện sẽ kích hoạt và bạn sẽ có thể nối thêm bất cứ điều gì bạn muốn vào DOM.


6
if($('#test2').is(':checked')) {
    $(this).append('stuff');
} 

4
$("input").bind('click', function(e){
   if ($(this).val() == 'Yes') {
        $("body").append('whatever');
   }
});

Không quá chắc chắn về điều này nhưng, sẽ $("#postageyes:checked"luôn luôn trở lại đúng không? Bạn sẽ không phải sử dụng .lengthnó để làm việc chứ?
Phil

đã xóa "hoặc" và mọi thứ sau đó
genesis


0
jQuery('input[name="inputName"]:checked').val()

Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Patrick Hund

Hiểu rồi. Câu trả lời tiếp theo sẽ có một.
Benjamin

0

Điều này sẽ lắng nghe sự kiện thay đổi. Tôi đã thử câu trả lời từ người khác nhưng những câu đó không hiệu quả với tôi và cuối cùng, câu hỏi này đã có hiệu quả.

$('input:radio[name="postage"]').change(function(){
    if($(this).is(":checked")){
        alert("lksdahflk");
    }
});
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.