2017-04-19 67 views
0

我在PHP是這樣的:localStorage的:店面複選框自動檢查

if(isset($_POST['submit']){ 
      $check = in_array($row['service_object_id'], $values) ? 'checked' : ''; 
    }      
    echo '<input type="checkbox" class="faChkRnd" id="'.$row['service_object_id'].'" name="list[]" value="'.$row['service_object_id'].'" '.$check.'>'; 

每次我按一個提交按鈕,它會檢查複選框與價值觀裏面$check。 它運行良好,但我想按下按鈕後,自動存儲在localStorage中選中的複選框。

我已經使用這個腳本,並將其存儲點擊後,但它不會自動工作:

<script type = "text/javascript"> 
$('.faChkRnd').on('click', function() { 
    var fav, favs = []; 
    $('.faChkRnd').each(function() { // run through each of the checkboxes 
    fav = {id: $(this).attr('id'), value: $(this).prop('checked')}; 
    favs.push(fav); 
    }); 
    localStorage.setItem("favorites", JSON.stringify(favs)); 
}); 

$(document).ready(function() { 
    var favorites = JSON.parse(localStorage.getItem('favorites')); 
    if (!favorites.length) {return}; 
    console.debug(favorites); 

    for (var i=0; i<favorites.length; i++) { 
    console.debug(favorites[i].value == 'on'); 
    $('#' + favorites[i].id).prop('checked', favorites[i].value); 
    } 
}); 
</script> 

任何想法?謝謝 !

回答

0

你敲擊檢查類型favorites[i].value。字符串或布爾值!?

字符串:

if(favorites[i].value == "true") { 
    $('#' + favorites[i].id).prop('checked',true); 
} 

布爾:

$('#' + favorites[i].id).prop('checked',favorites[i].value); 

例如:

字符串:https://jsfiddle.net/utm4za2p/1/

布爾:https://jsfiddle.net/utm4za2p/3/

+0

使用此解決方案,在我刷新頁面後,它將清除localStorage,因爲我得到僅在提交按鈕後才需要檢查的複選框的值。我找到了一個沒有JS的替代解決方案:我將我的$ check值存儲到SESSION中......如果您認爲可以用JS解決此問題,請不要害羞:) – xarj

+0

如果刷新頁面,則必須將數據保存到會話或cookie將其設置爲複選框 相同:'var localStorage = sessionStorage;' – Xupitan

0

您可以使用提交方法。
你有一個表單提交按鈕,你必須改變它只是一個普通的按鈕。

而且你應該把

$('.yourForm').submit() 

點擊處理程序,你的值保存到localStorage的結束。

因爲當你按下提交按鈕時,它可能觸發你的點擊處理程序之前。
您需要先保存值然後提交表單。

+0

我易懂nd你正在嘗試做什麼,但由於某種原因,它會將localStorage中的每個值都存儲爲「false」。我找到了一個沒有JS的替代解決方案:我將我的$ check值存儲到SESSION中......如果你認爲你可以用JS解決這個問題,不要害羞:) – xarj

+0

那麼我已經制作了工作原型[link](https: //jsfiddle.net/a7mk62sw/1/)。我在代碼中發現錯誤,但我不確定這是否是問題的原因。當您點擊某個複選框時,您想要將複選框狀態存儲到localStorage。例如,您有2個複選框,但如果在複選框上單擊兩次,則會放入localStorage 4記錄,因爲每次單擊複選框時都會將狀態置於數組中。舊值也會存儲。我認爲這可能會導致問題。因此我改變了對象的使用方法,並將id用作關鍵字。你可以分析我的代碼,我希望它能幫助你。 – maldan