2017-01-03 69 views
1

我試圖使用checkboxes輸入框隱藏,在上input作品localStorage.hide()保存checkbox名字,但是當我刷新頁面它不會持續要隱藏input字段,也不要將checkbox設爲uncheck隱藏輸入字段時複選框被選中,並在localStorage的jQuery的

有人能指出我錯過了什麼,我知道支票if()仍然是不完整的,我試着做一個for()if內得到localStorage值和做('#'+forVal).hide()('#' + forVal).prop('checked', false)但沒有在所有的工作。

inputs是動態

searchParams = getObjects(apiPaths[i].get.parameters); 
for (var x = 0; x < searchParams.length; x++) { 
    var container = $('#checkBox'); 
    var inputs = container.find('input'); 
    var id = inputs.length + 1; 
    var inputName = searchParams[x].name; 
    $('<textarea />', { id: inputName, name: inputName, placeholder: inputName, rows: "2", class: "search-area-txt col-sm-12" }).appendTo(searchbox); 
    var chkBoxElement = $('<input />', { type: 'checkbox', id: inputName, name: inputName }).appendTo(checkBox); 
    chkBoxElement.click(function() { 
      checkBoxSetting(this.id); 
    }); 
    chkBoxElement.prop('checked', true); // initially all inputs are checked 

    $('<label />', { 'for': 'x' + id, text: inputName, id: inputName, name: inputName }).appendTo(checkBox); 
} 

檢查localStorage爲複選框

var inputNames = []; 
if (localStorage.getItem('chked') !== null) { 
    inputNames = JSON.parse(localStorage.getItem('chked')); 
} 

其保存到localStorage

function checkBoxSetting(id) { 
    var indexOfItem = inputNames.indexOf(id) 
    if (indexOfItem >= 0) { 
     inputNames.splice(indexOfItem, 1); 
    } else { 
     inputNames.push(id); 
    } 
    localStorage.setItem('chked', JSON.stringify(inputNames)); 
    $("#" + inputNames).hide(); 
} 

實施例的HTML與保存到localStorage

Plunker

HTML文本字段中

<textarea id="id" name="id" placeholder="id" rows="2" class="search-area-txt col-sm-12"></textarea> 
<textarea id="sku" name="sku" placeholder="sku" rows="2" class="search-area-txt col-sm-12"></textarea> 
<textarea id="code" name="code" placeholder="code" rows="2" class="search-area-txt col-sm-12"></textarea> 

複選框

<div id="checkBox"> 
<input type="checkbox" id="id" name="id"> 
<label for="id" id="id" name="id">id</label> 
<input type="checkbox" id="sku" name="sku"> 
<label for="sku" id="sku" name="sku">sku</label> 
<input type="checkbox" id="code" name="code"><label for="code" id="code" name="code">code</label> 
</div> 
+0

控制檯中的任何錯誤?你能站在某個地方的測試頁面(例如codepen),以便我們可以看到它的實際行動嗎? – danwellman

+0

你在哪裏把localstorage的值打包到HTML-dom中? – Zorken17

+0

給我們一些HTML以及 – Zorken17

回答

-2

進行本地存儲,你應該使用儲物櫃。

您必須在HTML文件中包含一個js庫,然後才能將數據存儲在本地存儲中,甚至在刷新頁面後也能獲得該數據庫。

下面是一個例子,你如何能夠在本地存儲設定值:

Lockr.set(「狀態」,「檢查」);

,你可以得到值回如下:

VAR用戶= Lockr.get( '狀態');

在這裏你可以得到locker.js庫文件:

https://github.com/tsironis/lockr/blob/master/lockr.js

+0

爲什麼當已經有本地的插件時,您會使用另一個插件將其保存到localStorage? – MrNew

+0

可能丟失本地支持的情況下的回退抽象..? – danwellman

+1

@danwellman是啊,但我想我會堅持本地localStorage。注意檢查我上面提到的關於我的問題的plnkr – MrNew

1

這是一個解決方案的開始。這將處理本地存儲,並在重新加載頁面時檢查複選框是否已被選中。

$(document).ready(function() { 
 
    var inputNames = [] 
 

 
    if (localStorage.getItem('chked') !== null) { 
 
    inputNames = JSON.parse(localStorage.getItem('chked')); 
 
    $("#" + inputNames[0]).attr("checked", true) 
 
    $('#name').hide() 
 
    } 
 

 

 
    function checkBoxSetting(name) { 
 
    var indexOfItem = inputNames.indexOf(name) 
 
    if (indexOfItem >= 0) { 
 
     inputNames.splice(indexOfItem, 1); 
 
    } else { 
 
     inputNames.push(name); 
 
    } 
 

 
    localStorage.setItem('chked', JSON.stringify(inputNames)); 
 

 
    $('#name').toggle() 
 
    } 
 
});
<script data-require="[email protected]" data-semver="2.2.4" src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 
 

 
<input type="text" id="name" /> 
 
<input type="checkbox" id="checkBoxName" onclick="checkBoxSetting(this.id)" />

你不能對其進行測試,在這裏,因爲計算器不會讓您保存到本地存儲。

+0

是隱藏輸入,但是當您刷新頁面時,它仍然不會保留要隱藏的輸入。我試過這個在plnkr – MrNew

+0

忘了添加,如果你取消勾選這個框,它會隱藏輸入,如果你再次檢查它會顯示它。所以它就像一個切換功能。 – MrNew

+0

如果你閱讀我的文本,它不會在任何jsfiddle,plnkr或其他Web編譯器上工作。那是因爲他們不允許本地存儲。但是,如果您承載您的代碼,則將其作爲.html文件在任何網頁瀏覽器中運行即可使用。 – Zorken17

相關問題