Vermeidung von Doppel Funktion in jQuery
-
29-09-2019 - |
Frage
Diese Funktion wird zweimal geschrieben das Kontrollkästchen Zustand zu speichern sowie der entsprechenden div Text. Wie schreibe ich den Code in einer Funktion einmal und dann zweimal auf load und Ereignisse klicken bzw.?
$(document).ready(function() {
$("#bquote").load("quotes_in.php", function() {
// a key prefix is used for the cookie/storage
var storedData = getStorage('com_mysite_checkboxes_');
$('div.check input:checkbox').bind('change',function(){
$('#ab_' + this.id).toggle($(this).is(':checked'));
// save the data on change
storedData.set(this.id, $(this).is(':checked')?'checked':'not');
}).each(function() {
// on load, set the value to what we read from storage:
var val = storedData.get(this.id);
if (val == 'checked') $(this).attr('checked', 'checked');
if (val == 'not') $(this).removeAttr('checked');
if (val) $(this).trigger('change');
});
});
});
$(function() {
/*load quotes on click of link*/
$("a#main")
.click(function() {
$(this).addClass("current");
$("#bquote").load("quotes_in.php", function() {
// a key prefix is used for the cookie/storage
var storedData = getStorage('com_mysite_checkboxes_');
$('div.check input:checkbox').bind('change',function(){
$('#ab_' + this.id).toggle($(this).is(':checked'));
// save the data on change
storedData.set(this.id, $(this).is(':checked')?'checked':'not');
}).each(function() {
// on load, set the value to what we read from storage:
var val = storedData.get(this.id);
if (val == 'checked') $(this).attr('checked', 'checked');
if (val == 'not') $(this).removeAttr('checked');
if (val) $(this).trigger('change');
});
});
});
Lösung
Sie können es erklären einmal als eine benannte Funktion und nennen es zweimal, wie folgt aus:
$(function() {
function loadQuotes() {
$("#bquote").load("quotes_in.php", function() {
// a key prefix is used for the cookie/storage
var storedData = getStorage('com_mysite_checkboxes_');
$('div.check input:checkbox').bind('change',function(){
$('#ab_' + this.id).toggle(this.checked);
// save the data on change
storedData.set(this.id, this.checked?'checked':'not');
}).each(function() {
// on load, set the value to what we read from storage:
var val = storedData.get(this.id);
if (val == 'checked') $(this).attr('checked', 'checked');
if (val == 'not') $(this).removeAttr('checked');
if (val) $(this).trigger('change');
});
});
}
$("a#main").click(function() {
$(this).addClass("current");
loadQuotes();
});
loadQuotes(); //call it once on load
});
ich auch $(this).is(':checked')
zu this.checked
in der oben verändert, keine Notwendigkeit, es langsamer zu machen, die DOM-Eigenschaft funktioniert hier:)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow