タイトルの通り一般質問です。私がやっていることは適切な方法なのか、オブジェクトのスコープを維持するためのより簡単な方法があるのか どうかはわかりません。
ここに、私が何を扱っているかを説明するための例があります。「this」オブジェクトをパラメーターを介して関数に渡していることがわかりますが、これが唯一の方法ですか? パラメータを渡す必要がない方法はありますか。
基準は、フォームに識別クラス/ID がないことであることに注意してください。
ありがとう。
タイトルの通り一般質問です。私がやっていることは適切な方法なのか、オブジェクトのスコープを維持するためのより簡単な方法があるのか どうかはわかりません。
ここに、私が何を扱っているかを説明するための例があります。「this」オブジェクトをパラメーターを介して関数に渡していることがわかりますが、これが唯一の方法ですか? パラメータを渡す必要がない方法はありますか。
基準は、フォームに識別クラス/ID がないことであることに注意してください。
ありがとう。
あなたの例によると、より簡単な方法があります:
$("form select").on('change', changeText);
function changeText(e) { //the event is still available
$("input", e.target.form).val("Changed!"); //so is the target and the form
}
同じことをします。フィドル
より複雑な関数に関しては、要素を関数に渡すことは通常問題ではありません。私の意見では、グローバルを使用するよりも優れています。
標準の bind 関数を使用して、コンテキストを明示的に設定できます
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind
または、jquery に同等のものがある場合は (これについてはよくわかりません)
これは有効な方法です。代わりに、より高いスコープで変数を宣言し、最初の関数で割り当て、2 番目の関数で引数を使用せずに参照することもできます。
たとえば、JSFiddle へのこの編集を参照してください。
そのアプローチには何も問題はありません...完全に問題ありません:)
しかし、それでも他の方法を知りたい場合は、たくさんあります...ここにそれらのいくつかを投稿します...
1) セレクター関数で必要なすべての値を取得し、それらを関数に渡します。
$("form select").change(function() {
var val1 = $("selector1").val();
var val1 = $("selector2").val();
var val1 = $("selector3").val();
changeText(val1,val2,val3);
});
function changeText(val1,val2,val3) {
// your operation
}
2) 必要な値を配列に追加し、その配列をターゲット関数に渡します。
var targetArray = new Array();
$("form select").change(function() {
targetArray[0]=//your val1
targetArray[1]=//your val2
targetArray[2]=//your val3
changeText(targetArray);
});
function changeText(arr) {
// your operation
}
変数をスコア外に宣言し、そのウィンドウオブジェクトを設定することにより、ウィンドウオブジェクトを操作できます。
$("form select").change(function() {
window.thisObj = $(this).parent("form");
changeText();
});
function changeText() {
window.thisObj.find("input").val("Changed!");
}
しかし、あなたが行った方法は適切なものであり、ウィンドウオブジェクトの操作は常に避けるべきです.