2017-02-07 7 views
1

Ich bin fest auf eine Timeout arbeiten. Ich habe bereits einen Arbeitscode, aber es scheint mir der falsche Weg zu sein.jquery define Timeout beim Aufruf der Funktion

Arbeits Code aber wahrscheinlich nicht die beste:

/* Autosave */ 
// On load we hide all autosave messages. 
$('.jform_params_autosave-cg').hide(); 
// Below is the function that handles the autosave. 
$.fn.autoSave = function(){ 
    // We remove the autosave message from it's place defined by the xml and add it to the system message container. 
    var autosavemessage = $('.jform_params_autosave-cg'); 
    autosavemessage.detach(); 
    autosavemessage.appendTo('#system-message-container'); 
    // Now we show the message. 
    $('.jform_params_autosave-cg').show(); 
    // Here we save the extension. 
    Joomla.submitbutton('module.apply'); 
} 
// On change of the below elements we run the autosave. 
//------------------------------------------// 
// DUPLICATE AUTOSAVE FUNCTION BELOW 
//------------------------------------------// 
// Autosave: Theme Selection 
$("#jform_params_theme_selection").change(function() { 
    $.fn.autoSave(); 
}); 
// Autosave: Add Content 
$("a.group-add.btn.btn-mini.button.btn-success").click(function() { 
    setTimeout(
    function() 
    { 
     $.fn.autoSave(); 
    }, 5000); 
}); 

Die Funktion:

$.fn.autoSave = function(){ 
    // We remove the autosave message from it's place defined by the xml and add it to the system message container. 
    var autosavemessage = $('.jform_params_autosave-cg'); 
    autosavemessage.detach(); 
    autosavemessage.appendTo('#system-message-container'); 
    // Now we show the message. 
    $('.jform_params_autosave-cg').show(); 
    // Here we save the extension. 
    Joomla.submitbutton('module.apply'); 
} 

Die Function Call

$("#jform_params_theme_selection").change(function() { 
    $.fn.autoSave(); 
}); 

der Funktionsaufruf mit Timeout

$("a.group-add.btn.btn-mini.button.btn-success").click(function() { 
    setTimeout(
    function() 
    { 
     $.fn.autoSave(); 
    }, 5000); 
}); 

Was will ich

  1. Machen Sie das Timeout innerhalb der Funktion erreichen.
  2. Definieren Sie die Zeitüberschreitung beim Aufrufen der Funktion.

Mit der Definition ich es meine Berufung etwas wie $.fn.autoSave(5000); oder $.fn.autoSave().timeout(500);

Ich habe versucht, einen funktionierenden Code zu bekommen, aber bisher kein Glück. Ich werde diesen Beitrag immer dann aktualisieren, wenn ich mehr Erfolg oder Details hinzufügen kann.

Vielen Dank für Ihre Hilfe.

Jeder Link zu bestehenden SO-Fragen wird auch geschätzt, wie ich für die falschen Schlüsselwörter googlen könnte.

+0

Sie suchen "Erstellen Sie ein Plugin" verwenden

$('selector').autoSave(5000) oder $('selector').autoSave() hier überprüfen https://learn.jquery.com/plugins/basic-plugin -creation/ –

+0

@TolgahanAlbayrak Danke für den Link. In der Tat suche ich danach. Leider habe ich auf dem kurzen Blick die Seite übernommen, es gibt kein Beispiel mit Timeout. Ich werde es von A bis Z lesen, aber glaube nicht, dass es auf der Seite ist. – purple11111

Antwort

2

Hier ist die modifizierte Version Ihrer Funktion. Jetzt hat es optionale Timeout-Parameter. Sie können es wie

$.fn.autoSave = function(timeout) { 
 
    function doIt() { 
 
    // We remove the autosave message from it's place defined by the xml and add it to the system message container. 
 
    var autosavemessage = $('.jform_params_autosave-cg'); 
 
    autosavemessage.detach(); 
 
    autosavemessage.appendTo('#system-message-container'); 
 
    // Now we show the message. 
 
    $('.jform_params_autosave-cg').show(); 
 
    // Here we save the extension. 
 
    Joomla.submitbutton('module.apply'); 
 
    return this; 
 
    } 
 
    timeout = Number(timeout) || 0; 
 
    var f = doIt.bind(this); 
 
    if(timeout < 0) return f(); 
 
    setTimeout(f, timeout); 
 
    return this; 
 
}

+0

Vielen Dank, es funktioniert direkt. Würde es Ihnen etwas ausmachen zu erklären, was die letzten 5 Zeilen machen? PS: In diesem Fall war der Selektor: '$ .fn.autoSave (5000);' – purple11111

+0

Sicher, es wickelt die aktuelle Logik in einen inneren Callback, um die gleichen Zeilen zweimal zu schreiben. Dann überprüft es, ob der Timeout-Parameter eine positive Zahl ist. Wenn nicht, ruft es die Hauptlogik direkt auf, andernfalls löst es eine Zeitüberschreitung für unseren inneren Rückruf aus. –

+0

@ purple11111 Eigentlich ist '$ .fn.autoSave' kein Selektor. Es ruft die Plugin-Methode direkt auf. Wenn Sie eine Funktion im $ .fn-Objekt haben, bedeutet das, dass Sie dieselbe Funktion wie '$ ('Ihr_Element_Selektor') verwenden können. YourFunction()'. Es ist Plugin-Funktion von jQuery –

Verwandte Themen