2016-03-21 75 views
1

我有一個腳本,當一個複選框被選中時顯示一個值,並且在選中多個複選框時不顯示任何值。jQuery:多個複選框,獲取唯一被選中的值

這是工作的一點。 如果我選擇一個複選框,我會得到與其最接近的值class=list,如果我點擊第二個複選框,我什麼也沒有得到,這是正確的。

但是,當我取消選擇第二個複選框時,警報顯示它的值不是最後一個選中複選框的值。

那麼如何獲得唯一選中複選框的值?

這是複選框的佈局,這是最近的class list

<tr> 
<td>1</td><td><input type='checkbox' name='id[0]' id='0'/></td> 
<td class='list'><span>1234</span></td> 
<td><span></span></td> 
</tr> 

這是jQuery的我使用:

$(document).ready(function() { 
    var count; 
    $(':checkbox').change(function() { 
     count = ($('input[type="checkbox"]:checked').length) ; 
     txt = $(this).closest('tr').find('.list').text(); 
     if (count == "1") { 
      alert (txt) 
     } 
    }); 
}); 

下面是一個的jsfiddle顯示問題:http://jsfiddle.net/f7qcuwkf/ 如果您檢查選項1的警報顯示1234.

如果您檢查選項3則沒有顯示(這是正確的)如果您不選中無論是哪種選項,您都會看到它的值,而不是剩餘的檢查條目的值。 EG ::

不選3,我得到3456,而不是1234(1仍選中)

任何想法如何解決這個問題?

感謝

+1

當然,如果你遍歷與'this'的DOM,你會得到改變複選框的vaue。您需要使用複選框遍歷DOM:http://jsfiddle.net/f7qcuwkf/2/ –

+0

@ Karl-AndréGagnon感謝您的快速回復。如果你發佈這個答案,我會接受它。 – JeffVader

回答

1

如果您遍歷與this的DOM,你會得到改變複選框的vaue。您需要使用複選框來遍歷DOM。爲此,您可以緩存選定的複選框並使用它來遍歷DOM。

$(document).ready(function() { 
    var count; 
    $(':checkbox').change(function() { 
     var $checkboxes = $('input[type="checkbox"]:checked'); 
     count = ($checkboxes.length) ; 

     if (count == "1") { 
      var txt = $checkboxes.closest('tr').find('.list').text(); 
      alert (txt) 
     } 
    }); 
}); 

http://jsfiddle.net/f7qcuwkf/5/

+0

非常感謝:) – JeffVader

0

您需要分配txt變量這樣(尋找最接近行到選中的複選框,並且不被更改的):

txt = $('input[type="checkbox"]:checked').closest('tr').find('.list').text(); 

Demo

0

當您更改時,您正在觸發複選框中的文本,而不是從複選框中選中。

$(":checkbox:checked").closest("tr").find('.list').text()

http://jsfiddle.net/f7qcuwkf/1/

相關問題