2009-08-20 7 views
9

いくつかの背景:最近のプロジェクトで好奇心:動的なAjaxデータ変数名を使用できますか?

、私は様々な入力が更新された際に作られたいくつかのAjaxコールを処理するだろう合理jQueryのプラグインを作成してみました。

$("#email").updateChanges(); 

を次に、プラグインの中から、私は入力のid、値を収集

など、:私はちょうどそうのように、様々な入力にそれを呼び出すことができるように、私はプラグインとしてJavaScript関数を書きました問題:

私が実際にやりたかったが解決策が見つからなかったことは、ajaxに渡されるデータ変数の名前を動的に生成することでした。 inputName変数は、「パスワード」の代わりに、あるときにどのように私は{ password: inputValue }の代わり{ email: inputValue }としてAjax呼び出しのためのデータを提示しない...

jQuery.fn.updateChanges = function(){ 

    this.bind('blur',function(){ 

     var inputName = $(this).attr("name"); 
     var inputValue = $(this).val(); 

     $.post('/ajax/updateValue.php', 
     { email: inputValue }, function(ret){ 
      if (ret=='success') alert("all good!"); 
     } 

    } 

} 

:この機能を考えると、より明確にする

"Eメール"?これは非常に具体的な例ですが、基本的には、データ変数の名前を個別の動的変数から読み取る方法を探しています。

私はwindow[inputName]を試してみましたが、これは無理だと私はかなり確信しています。しかし、誰かがアイデアを持っているなら、私は非常に感銘を受けたでしょう。

ちなみに私たちは{ type: inputName, value: inputValue }に行くことになってしまいましたが、PHP側で少し足が足りました(私には聞かないで、私はフロントエンドの人です:)。

ありがとうございます!

+0

をどのように必要な変数名を通信することを計画しています関数?パラメータになりますか? – JorenB

答えて

20

私が正しくあなたを理解していれば、これはあなたが後にしているものです:

jQuery.fn.updateChanges = function(){ 

    this.bind('blur',function(){  

     var data = {}; 
     data[$(this).attr("name")] = $(this).val(); 

     $.post('/ajax/updateValue.php', 
     data, 
     function(ret){ 
      if (ret=='success') alert("all good!"); 
     }  
    }  
} 

あなたの主な問題は、オブジェクトリテラル表記を使用して動的な値を使用するように、あなたが本当に悪いに戻すことなく行うことはできません何かをしようとしていましたeval()が属していないeval()のようなものです)。

var myObj = { 'n1': 'v1' }; 

は同等です:

var myObj = {}; // {} = new Object(); 
myObj['n1'] = 'v1'; 

と同等です:

var myObj = {}, 
    myKey = 'n1', 
    myVal = 'v1'; 

myObj[myKey] = myVal; 
+0

うわー、それは素晴らしいです。まさに私が探していたもの。もっと学ぶことがもっとたくさん! –

+0

(ありがとう、Lior!) –

-1

これを試してみてください。

jQuery.fn.updateChanges = function(){ 

    this.bind('blur',function(){ 

     var inputName = $(this).attr("id"); 
     var inputValue = $(this).val(); 
     var data = eval("{"+ inputName +":"+ inputValue +" }"); 

     alert("send: "+ inputName+"\n"+data[inputName]); 

     $.post('/ajax/updateValue.php', 
     data, function(ret){ 
      if (ret=='success') alert("all good!"); 
     } 

    } 

} 
+2

evalは遅く、汚れて危険です。避けてください。 – Quentin

+1

OK、3725 "jQuery-1.3.2.js" - > 'window ["eval"]'の行の変更についてはJohn Resigに転送します。あなたのために、私は誰もjQueryを使用していないと思います。 誰が正しいですか? ウィンドウ["eval"]はネイティブの "eval()"を返します。 –

関連する問題