2010-04-26 36 views
6

Xin chào Tôi muốn nhận danh sách các hộp kiểm được chọn trong trang, thực sự những gì tôi thực sự cần là có được văn bản của phần tử bên cạnh hộp kiểm là phần tử html <li> mã bên dưới và nó không làm việcJquery nhận được các hộp kiểm được chọn

đây là jQuery hiện tại của tôi:

$(document).ready(function() { 
    $('#target').click(function() { 
    alert("in"); 
    var checkValues = []; 
    $('input[name=checkboxlist]:checked').each(function() { 
     alert($(this)val()); 
     checkValues.push($(this)val()); 
    }); 
    }); 
}); 

Sau đây là HTML:

<ul id="7b1fe2bd-1b26-4185-8cd9-aec10e652a70"> 
<li>Structured Products<input type="checkbox" name="checkboxlist"</li> 
<li>Global FID 
<ul> 
    <li>PowerPoint Presentations<input type="checkbox" name="checkboxlist"</li> 
    <li>Global Deck 
    <ul> 
    <li>Test1<input type="checkbox" name="checkboxlist"</li> 

    <li>Test2<input type="checkbox" name="checkboxlist"</li> 
    <li>Test3<input type="checkbox" name="checkboxlist"</li> 

    </ul> 
    <input type="checkbox" name="checkboxlist"</li> 
    <li>Credit Default Swaps Position 
    <ul> 
    <li>Test4<input type="checkbox" name="checkboxlist"</li> 

    <li>Test5<input type="checkbox" name="checkboxlist"</li> 

    </ul> 
    <input type="checkbox" name="checkboxlist"</li> 
    <li>Thought Leadership<input type="checkbox" name="checkboxlist"</li> 
    <li>Fixed Income Perspectives<input type="checkbox" name="checkboxlist"</li> 
    <li>Public Policy Information and Regulatory<input type="checkbox" name="checkboxlist"</li> 

    <li>Regional FID<input type="checkbox" name="checkboxlist"</li> 

</ul> 
<input type="checkbox" name="checkboxlist"</li> 
<li>Global Rates<input type="checkbox" name="checkboxlist"</li> 
<li>Global Credit Products<input type="checkbox" name="checkboxlist"</li> 
<li>FX<input type="checkbox" name="checkboxlist"</li> 

<li>Emerging Markets<input type="checkbox" name="checkboxlist"</li> 
<li>Commodities<input type="checkbox" name="checkboxlist"</li> 
<li>testcat<input type="checkbox" name="checkboxlist"</li> 
<li>testcat<input type="checkbox" name="checkboxlist"</li> 

</ul> 

Trả lời

17

đầu vào của bạn cần được đóng với một số /> ở cuối để làm cho HTML của bạn hợp lệ, như sau:

<input type="checkbox" name="checkboxlist" /> 

Sau đó, bạn có thể làm jQuery như thế này để có được một loạt các văn bản:

$(function() { 
    $('#target').click(function() { 
    var checkValues = $('input[name=checkboxlist]:checked').map(function() { 
     return $(this).parent().text(); 
    }).get(); 
    //do something with your checkValues array 
    }); 
});​ 

You can see this working here

Vì tất cả bạn cần là phụ huynh của .text() với bố trí, bạn có thể sử dụng .map() để nhanh chóng nhận được một mảng của thuộc tính dựa trên bộ chọn.

+0

Thanks a lot Nick – kevin

+1

Để làm cho HTML hợp lệ không đòi hỏi các dấu gạch chéo, mà trình phân tích cú pháp trình duyệt sẽ bỏ qua. –

+0

@Tim - Ít nhất, nó phải được đóng lại, tại sao không làm điều đó trong một cách hợp lệ XHTML trong khi bạn đang ở đó? Đó là HTML hợp lệ với nó, nó không hợp lệ XHTML mà không có nó ... nói rằng trình duyệt sẽ hoàn toàn bỏ qua nó là một tuyên bố không chính xác. Bạn đang giả định DOCTYPE của mình, nhưng '/>' hoạt động trong * bất kỳ * doctype nào, không có giả định nào được thực hiện ở đó. –

3

Trước hết bạn phải clos e tag hộp kiểm của bạn

<input type="checkbox" name="checkboxlist" 

nên

<input type="checkbox" name="checkboxlist" /> 

Tôi nghĩ rằng, từ HTML của bạn, bạn có thể nhận được văn bản của lis đó sẽ là nội dung mong muốn

$(function(){ 
    $('#target').click(function(){ 
     var selected = new Array(); 
     $("input:checkbox[name=checkboxlist]:checked").each(function(){ 
      var val = $(this).closest("li").text(); 
      selected.push(val); 
     }); 
    }); 
}); 
4
$("input[type=checkbox]:checked").parent().text() 
0

Bạn chưa đóng thẻ nhập chính xác. Ngoài ra, $(this)val() phải là $(this).val().

Nếu bạn có ý định để có được những văn bản của nguyên tố li chứa các yếu tố đầu vào, bạn có thể viết như sau:

$(this).parents("li:first").text(); 
+1

Có một '.closest (" li ")' làm cho việc này đơn giản hơn;) –

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