2017-04-19 5 views
0

ich so etwas wie dies in PHP haben:localstorage: Shop Kontrollkästchen aktiviert automatisch

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.'>'; 

Jedes Mal, wenn ich einen Submit-Button drücken, wird die Kontrollkästchen mit Werten innerhalb $check überprüfen. Es funktioniert gut, aber ich möchte die Kontrollkästchen in LocalStorage automatisch nach dem Drücken der Taste gespeichert speichern.

ich bereits dieses Skript verwendest sie nach dem Klick zu speichern, aber es wird nicht automatisch funktionieren:

<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> 

Irgendwelche Ideen? Vielen Dank !

Antwort

0

Sie überprüfen Art von favorites[i].value. Zeichenfolge oder Boolescher Wert?

string:

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

boolean:

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

Beispiel:

string: https://jsfiddle.net/utm4za2p/1/

boolean: https://jsfiddle.net/utm4za2p/3/

+0

Mit dieser Lösung wird die localStorage gelöscht, nachdem ich die Seite aktualisiert habe, da ich den Wert der Checkboxen bekomme, die erst überprüft werden müssen, nachdem ich eine Schaltfläche gesendet habe. Ich habe eine alternative Lösung ohne JS gefunden: Ich speichere meine $ check Werte in eine SESSION ... Wenn du denkst, dass du das mit JS lösen kannst, sei nicht schüchtern :) – xarj

+0

Wenn du die Seite aktualisierst, musst du Daten speichern Sitzung oder Cookie, um es in Kontrollkästchen zu setzen das gleiche wie: 'var localStorage = sessionStorage;' – Xupitan

0

Sie können die Methode submit verwenden.
Sie haben ein Formular mit dem Senden-Button und Sie müssen es nur zu einem normalen Button ändern.

Und Sie sollten

$('.yourForm').submit() 

bis zum Ende der Click-Handler setzen, wo Sie die Werte in die localstorage speichern.

Da, wenn Sie den Absenden-Button drücken, kann es vor Ihrem Click-Handler ausgelöst werden.
Sie müssen zuerst die Werte speichern und dann das Formular absenden.

+0

I understa nd was Sie versuchen zu tun, aber aus irgendeinem Grund werden alle Werte in localStorage als "false" gespeichert. Ich habe eine alternative Lösung ohne JS gefunden: Ich speichere meine $ check Werte in eine SESSION ... Wenn Sie denken, dass Sie das mit JS lösen können, seien Sie nicht schüchtern :) – xarj

+0

Nun habe ich funktionierenden Prototyp gemacht [link] (https: //jsfiddle.net/a7mk62sw1/). Ich habe einen Fehler in Ihrem Code gefunden, aber ich bin mir nicht sicher, ob das ein Problem war. Sie möchten Ihre Checkbox-Status in localStorage speichern, wenn Sie auf ein Kontrollkästchen klicken. Zum Beispiel haben Sie zwei Kontrollkästchen, aber wenn Sie zweimal auf das Kontrollkästchen klicken, fügen Sie localStorage 4 Datensätze ein, da Sie bei jedem Klicken auf das Kontrollkästchen den Status in Array eingeben. Alte Werte werden auch gespeichert. Ich denke, dass es die Probleme verursachen kann. Deshalb habe ich favs geändert, um zu widersprechen und ID als Schlüssel zu benutzen. Sie können meinen Code analysieren, ich hoffe, er wird Ihnen helfen. – maldan

Verwandte Themen