2017-02-02 3 views
0

Ich habe zwei separate js-Dateien. Einer von ihnen, services genannt, wo ich das Eingabefeld definiere und einige jQuery damit starte. Die andere Datei ruft services auf und arbeitet mit dem zurückgegebenen Wert.Wert der Eingabe in jQuery-Ereignis gibt undefiniert

Wenn ich den Wert innerhalb der Funktion (in services) verwende, wird der korrekte Wert zurückgegeben. Ansonsten in meiner secound Datei, es zurückgeben undefiniert, weil es wie scheint, wenn ich die Funktion aufrufen, ist es nicht warten, bis das .change Ereignis ausgelöst wird

Services.js

var service = { 

    main: function() { 
     console.log(service.input); 
    }, 

    init: function(input) { 
     service.input = input; 
    }, 

    getInputValue: function() { 
     $('#' + service.input).change(function() { 
      return $('#' + service.input).val(); 
     }); 
    } 
}; 

OtherJsFile.js

$(function(){ 
    var inputField; 

    service.init('inputId'); 
    inputField = service.getInputValue(); 

    //Should print the value of inputId 
    //Instead it prints undefined 
    console.log(inputField); 
}); 

Ich schätze jede Hilfe!

+0

Sie zu erreichen nichts Rückkehr von 'getInputValue()', Sie sind nur etwas von dem Wechsel-Handler zurückkehrt (was nichts tut es sei denn, es wird falsch zurückgegeben). Wenn kein Rückgabewert vorhanden ist, gibt JavaScript standardmäßig undefined zurück - weshalb "inputField = undefined". Sie sollten Ihre Funktion wahrscheinlich auf 'return $ (" # "+ service.input) .val() ändern;' – mhodges

+0

Vielen Dank für Ihre Antwort. Das wird mir nicht helfen, ich brauche dieses jQuery-Event – thissven

+1

Ich glaube, du verstehst wirklich falsch, was du versuchst zu tun = | – mhodges

Antwort

0

Ein Problem ist, was Sie innerhalb des Change-Handlers zurückgeben nur an die Event-Handler-Funktion zurück, nicht an die äußere getInputValue. Es wird also nichts von getInputValue() zurückgegeben ... und deshalb siehst du undefiniert.

Nächste Ausgabe ist das Ereignis noch nicht aufgetreten, wenn Sie versuchen, diesen Wert zu erhalten.

Um ehrlich zu sein, ich bin nicht sicher, was Sie hier versuchen,

+0

Ich versuche Redundanz zu reduzieren, weil ich dieses '.change' Ereignis mehr als nur einmal benötige. Und der Wert wird für einige Ajax-Anfragen – thissven

+1

benötigt, dass Change-Handler, was genau zu tun? Vielleicht benötigen Sie ein Array von Callbacks, die in den Change-Handler übergeben werden. Dann durchlaufen Sie das Array und rufen Sie alle auf. Oder verwenden Sie einige benutzerdefinierte Ereignisse – charlietfl

+0

Meine Absicht ist es, den Endwert des Eingabefeldes zu erhalten, das von einem Benutzer ausgefüllt werden kann. Zum Beispiel: Benutzertypen in "Hello World" Ich erhalte diesen Wert und kann ihn für meine Ajax-Post-Anfrage verwenden. Was auch immer, es ist nicht mein einziges Eingabefeld. Ich habe ein paar. – thissven

Verwandte Themen