2016-05-06 97 views
5

我有一個複選框的表單,並且我想在提交表單返回到具有錯誤的相同視圖後繼續檢查它。我聽說價值屬性可以幫助我使複選框被檢查,所以即時嘗試將其設置爲true/false。無論如何,即使我點擊它,輸入值也會保持「假」。究竟會發生什麼? 我認爲值點擊複選框複選框值真/假

<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false"> 

     <script> 
      $("#checkbox1").is(':checked', function(){ 
       $("#checkbox1").attr('value', 'true'); 
      }); 
     </script> 
+1

我很困惑的這個問題。看起來你想改變值,如果複選框被選中。但傳統上覆選框的值不會改變。他們的狀態決定他們是否傳遞給後端。 – Taplar

+0

值得指出的是,當切換複選框時,元素的HTML實際上並不會改變。因此,即使您將'checked'屬性應用於HTML以將其設置爲初始狀態,執行'.getAttribute('checked')'也不會返回任何內容。修復方法是訪問輸入的JS屬性,也稱爲'checked'。即在一個複選框的變化事件的香草JS處理程序中,這不做任何事情:'byId('tgt')。value = this.getAttribute('checked');',while this set the text to true or false :'byId('tgt')。value = this.checked;' – enhzflep

+0

你是說在第1頁上你可以選擇一個複選框然後提交,而在第二頁上你希望檢查狀態從它是如何存在在第一種形式? – Taplar

回答

11

如果我理解的問題,你想改變的值複選框取決於它是否被選中。

這裏是一個解決方案:

$('#checkbox-value').text($('#checkbox1').val()); 
 

 
$("#checkbox1").on('change', function() { 
 
    if ($(this).is(':checked')) { 
 
    $(this).attr('value', 'true'); 
 
    } else { 
 
    $(this).attr('value', 'false'); 
 
    } 
 
    
 
    $('#checkbox-value').text($('#checkbox1').val()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 

 

 
<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false"> 
 

 
<div id="checkbox-value"></div>

+0

'.on('change','是我真正需要的 – divHelper11

4

使用Checked = true

$("#checkbox1").prop('checked', true); 

注後變爲真/假:我不清楚你是否要的onclick /平變化的複選框事件。 is(":checked", function(){})在問題中是錯誤的。

+0

''true''和boolean做同樣的事情嗎? –

+0

不確定你需要圍繞真實的單引號 – gavgrif

+0

使用「真」時,它會按預期工作。但如果你想取消選中並使用'false'將不起作用。所以使用布爾值是很好的。更新。謝謝:) –

1

複選框在JS中真的很奇怪。您最好檢查是否存在checked屬性。 (即使checked設置爲'false',我的舊版jQuery版本也會返回true)。一旦確定某件事情已經過檢查,那麼您可以從value屬性中獲取值。

1

jQuery.is()函數沒有.is('selector', function)的簽名。

我猜你想要做這樣的事情:

 if($("#checkbox1").is(':checked')){ 
      $("#checkbox1").attr('value', 'true'); 
     } 
+0

感謝您指出這一點。無論如何,它仍然不適合我。哦,上帝爲什麼xD – divHelper11

2

試試這個

$("#checkbox1").is(':checked', function(){ 
 
    $("#checkbox1").prop('checked', true); 
 
}); 
 
    
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="checkbox" name="acceptRules" class="inline checkbox" id="checkbox1" value="false">

1

我要在以下假設來發布這個答案。 1) You (un)selected the checkbox on the first page and submitted the form. 2) Your building the second form and you setting the value="" true/false depending on if the previous one was checked. 3) You want the checkbox to reflect if it was checked or not before.

如果是這樣,那麼你可以做類似的情況:

var $checkbox1 = $('#checkbox1'); 
$checkbox1.prop('checked', $checkbox1.val() === 'true'); 
相關問題