2016-04-08 11 views
1

Ich habe ein Problem, ein keyup Ereignis Refactoring, die ich in meinem System haben, sieht die Veranstaltung zunächst wie folgt aus:jQuery, keyup Ereignis nicht ausgelöst

$('#quotation_search_client').on('keyup',function(){ 
    param=$('#quotation_search_client').val(); 
    if(param.length>=4){ 
     var params = { 
      social_reason: $('#quotation_search_client').val() 
     } 
     var clients=ClientServices.getByFilter(params); 
     var addresses=ClientServices.getAddresses(clients.clients); 
     QuotationServices.fillClients(clients.clients, addresses);  
    }else{ 
     $('#customers_results').html(""); 
    } 
}); 

Wenn es so ist, es funktioniert perfekt, aber wenn ich ändern sie es so aus:

$('#quotation_search_client').on('keyup',QuotationServices.searchClient({social_reason: $('#quotation_search_client').val()})); 

und definieren sie die Funktion "searchClient" wie folgt aus:

QuotationServices.searchClient = function(params){ 
     param=$('#quotation_search_client').val(); 
     if(param.length>=4){ 
      var clients=ClientServices.getByFilter(params); 
      var addresses=ClientServices.getAddresses(clients.clients); 
      QuotationServices.fillClients(clients.clients, addresses);  
     }else{ 
      $('#customers_results').html(""); 
     } 
    }; 

es nicht mehr funktioniert, n Nichts passiert, wenn ich etwas eintippe. Die Konsole zeigt keine Fehler an, deshalb habe ich eine console.log am Anfang der searchClient -Funktion geschrieben und scheinbar wird sie beim Laden meiner Seite ausgelöst, was zeigt, dass params.social_reason mit einer leeren Zeichenfolge kommt, aber wenn ich etwas eintippe, z Ich sagte, nichts passiert. Ich weiß nicht, was ich vermisse, ich habe nur den Code des Ereignisses in die searchClient-Funktion kopiert und eingefügt und die Var-Parameter gelöscht (weil ich es als Parameter erhalten werde), jede Hilfe?

+1

gleiche Antwort andere Frage. Ich überlegte, http://stackoverflow.com/q/8462381/497418 oder eine der vielen anderen verwandten Fragen zu verwenden, aber sie sind meistens 'setTimeout' verwandt. Am Ende das gleiche Grundproblem. – zzzzBov

Antwort

1

Sie führen die Funktion direkt nach der Deklaration des keyup-Ereignisses aus, sodass Sie die Funktion nicht an keyup event übergeben.

Sie sollten stattdessen tun:

$('#quotation_search_client').on('keyup',QuotationServices.searchClient); 

und ändern:

QuotationServices.searchClient = function(){ 
    var params = {social_reason: $('#quotation_search_client').val()} 
    var param = $('#quotation_search_client').val(); 
    if(param.length>=4){ 
     var clients=ClientServices.getByFilter(params); 
     var addresses=ClientServices.getAddresses(clients.clients); 
     QuotationServices.fillClients(clients.clients, addresses);  
    }else{ 
     $('#customers_results').html(""); 
    } 
}; 
+0

Interessant, das Problem ist, dass ich nicht will, dass die Parameter im Code-Block sein, weil ich die gleiche Funktionalität zu einem anderen Element hinzufügen möchte, aber mit einem anderen Wert params, aber das beantwortet meine Frage wirklich, also danke! Ich muss es auf eine andere Art und Weise tun, denke ich. – Dukra