2017-02-02 1 views
0

私は2つの別々のjsファイルを持っています。そのうちの1つはservicesと呼ばれ、入力フィールドを定義してjQueryを実行します。もう1つのファイルはservicesを呼び出し、返された値で動作します。jQueryイベントの入力値がundefineを返す

関数内の値(services)を使用すると、正しい値が返されます。それはのように思えるので、それ以外の場合は、私のsecoundファイルで、それは私が関数を呼び出す場合.changeイベントは

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

をトリガされるまで、それは待っていない、undefinedを返すん
$(function(){ 
    var inputField; 

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

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

ご協力いただきありがとうございます。

+0

を達成しようとしているのかわからないんだけど正直に言うと、あなただけの何もしない(変更ハンドラから何かを戻ってきていますfalseを返さない限り)。デフォルトでは戻り値がない場合、JavaScriptは未定義を返します。そのため、 'inputField = undefined 'です。おそらく関数を '$("# "+ service.input).val();に返すべきです。 – mhodges

+0

あなたの答えをありがとう。これは私を助けません、私はこのjQueryイベントが必要です – thissven

+1

私はあなたが本当にあなたがしようとしていることを誤解したと思う= | – mhodges

答えて

0

1つの問題は、変更ハンドラ内で返すものは、外側のgetInputValueではなく、イベントハンドラ関数にのみ戻ることです。だから、何も返されていないからgetInputValue() ...そして、それはあなたが未定義と見る理由です。

次の問題は、その値を取得しようとしているときにイベントがまだ発生していないことです。

は、私はあなたがここにあなたがgetInputValue() ``から何かを返されていません

+0

私は '.change'イベントがほんの一回以上必要となるため、冗長性を減らそうとしています。そして値はいくつかのAJAX要求に使用されます – thissven

+1

正確に何をするために変更ハンドラが必要ですか?おそらく、あなたは変更ハンドラに渡すためにコールバックの配列を必要とするでしょう。その後、その配列をループし、それらをすべて呼び出します。またはいくつかのカスタムイベントを使用する – charlietfl

+0

私の意図は、ユーザーが入力できる入力フィールドの最終値を取得することです。例:「Hello World」のユーザータイプこの値を受け取り、それを私のajax投稿要求に使用できます。それは私の唯一の入力フィールドではありません。私はいくつかありました。 – thissven

関連する問題