2017-04-06 47 views
0

我有這樣的HTML內容:如何在重新加載頁面時保持複選框被選中並顯示內容?

<div class="myClass" style="display:none"> 
<table class="table table-hover"> 
..... 
</table> 
</div> 

正如你可以看到這是一個表,該表隱藏

我有一個checkbox表明這一點,如果選中該複選框

<label class="switch"> 
    <input type="checkbox" id="test" onclick="toggle('.myClass', this)" autocomplete="on" ></legend> 
    <div class="slider round"></div> 
</label> 

<script language="JavaScript"> 
function toggle(className, obj) { 
    var $input = $(obj); 
    if ($input.prop('checked')) $(className).show(1000); 
    else $(className).hide(1000); 
} 
</script> 

正如你可以看到如果複選框被選中,它將被顯示,如果它未被選中,它會隱藏我的div

一切都很好。

現在,如果我重新加載此頁我要保留選中的複選框,如果它被選中,或者如果它是未選中我這樣說:

<script> 
$(function(){ 
    var test = localStorage.input === 'true'? true: false; 
    $('input').prop('checked', test || false); 
}); 

$('input').on('change', function() { 
    localStorage.input = $(this).is(':checked'); 
      if ($(this).prop('checked')) { 
      $(className).show(1000); //checked 
     } 
    console.log($(this).is(':checked')); 
}); 
</script> 

現在我的問題是

時我重新加載頁面,如果複選框被選中,它不顯示內容....所以我必須取消選中它,並再次檢查它使其工作。

如果選中該複選框,是否有可能重新加載頁面並顯示我的內容?

編輯

感謝@nnnnnn作爲回答之前,我得到這個工作:

<label class="switch"> 
    <input type="checkbox" id="test" ></legend> 
    <div class="slider round"></div> 
</label> 

<div class="myClass" style="display:none"> 
<table class="table table-hover"> 
... 
</table> 

<script> 
$(function(){   
    $('#test') 
     .prop('checked', localStorage.input === 'true') 
     .on('click', function() { 
     localStorage.input = this.checked; 
     if (this.checked) { 
      $('.myClass').show(1000); //checked 
     } else { 
      $('.myClass').hide(1000); 
     } 
     }) 
     .trigger('change'); 
}); 
</script> 

回答

3

編程設置元素的checked屬性不觸發附着在單元的任何clickchange處理。因此,在設置該行之後,您需要通過調用.trigger('change').change()來明確觸發change處理程序。

可以鞏固一次選擇$('#test')然後鏈接所需的方法後,你的代碼:

<script> 
$(function(){   
    $('#test') 
     .prop('checked', localStorage.input === 'true') 
     .on('change', function() { 
     localStorage.input = this.checked; 
     if (this.checked) { 
      $('.myClass').show(1000); //checked 
     } else { 
      $('.myClass').hide(1000); 
     } 
     }) 
     .trigger('change'); 
}); 
</script> 

你不應該需要另外toggle()功能或在線onclick處理程序將通過具有約束力的事件處理程序jQuery的。

請注意,我已經進一步簡化了一些事情。 var test = localStorage.input === 'true'? true: false;可以簡化爲var test = localStorage.input === 'true';,因爲===運算符返回布爾值,並且在下一行可以刪除|| false,因爲此時您知道test是布爾值。而且,除此之外,由於您在設置後只使用一次,您並不需要test變量。

此外,您在測試checked狀態時,在一個位置使用$(this).is(':checked'),在下一行使用$(this).prop('checked')時有點不一致。兩者都可以工作,但考慮到this是對DOM元素的引用,您可以簡單地說this.checked直接測試屬性而不使用jQuery。(唯一時間​​是有道理的是,當調用一個包含多個元素的jQuery對象時,並且您想要查看是否至少檢查了其中一個元素。)

+0

嘿!非常感謝你的回答,在嘗試你的代碼後,如果我有它檢查我重新加載頁面,並更改爲未選中,如果我再次重新加載頁面更改檢查和顯示的內容,如我所料,但我真正需要的是如果我有檢查我和頁面需要重新加載它必須檢查並顯示我的內容。我剛剛編輯了我的問題,我添加了你的代碼! – User100696

+0

噢,對不起,這是因爲'.trigger('click')'改變了檢查狀態,就像用戶點擊框一樣。如果使用「change」事件,那不會發生,對不起。我會更新我的答案,只是使用''change'' - 我認爲我的推薦使用''click''現在可能已經過時了(它只適用於較老的IE,當通過鍵盤「點擊」框時,所以...)。 – nnnnnn

+0

完美!萬分感謝! – User100696

0

嘗試添加代碼行$('input')。change (); as

$(function(){ 
     var test = localStorage.input === 'true'? true: false; 
     $('input').prop('checked', test || false); 
     $('input').change(); 
    }); 
+0

不適合我 – User100696

相關問題