0

タイトルの通り一般質問です。私がやっていることは適切な方法なのか、オブジェクトのスコープを維持するためのより簡単な方法があるのか​​ どうかはわかりません。

ここに、私が何を扱っているかを説明するための例があります。「this」オブジェクトをパラメーターを介して関数に渡していることがわかりますが、これが唯一の方法ですか? パラメータを渡す必要がない方法はありますか。

基準は、フォームに識別クラス/ID がないことであることに注意してください。

http://jsfiddle.net/TmaHs/

ありがとう。

4

5 に答える 5

2

あなたの例によると、より簡単な方法があります:

$("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
}

同じことをします。フィドル

より複雑な関数に関しては、要素を関数に渡すことは通常問題ではありません。私の意見では、グローバルを使用するよりも優れています。

于 2012-08-02T15:06:41.433 に答える
1

標準の bind 関数を使用して、コンテキストを明示的に設定できます

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/bind

または、jquery に同等のものがある場合は (これについてはよくわかりません)

于 2012-08-02T15:01:08.803 に答える
0

これは有効な方法です。代わりに、より高いスコープで変数を宣言し、最初の関数で割り当て、2 番目の関数で引数を使用せずに参照することもできます。

たとえば、JSFiddle へのこの編集を参照してください。

于 2012-08-02T15:01:33.757 に答える
-1

そのアプローチには何も問題はありません...完全に問題ありません:)

しかし、それでも他の方法を知りたい場合は、たくさんあります...ここにそれらのいくつかを投稿します...

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
    }
​
于 2012-08-02T15:06:29.337 に答える
-1

変数をスコア外に宣言し、そのウィンドウオブジェクトを設定することにより、ウィンドウオブジェクトを操作できます。

$("form select").change(function() {
    window.thisObj = $(this).parent("form");
    changeText(); 
});

function changeText() {
    window.thisObj.find("input").val("Changed!");   
}

しかし、あなたが行った方法は適切なものであり、ウィンドウオブジェクトの操作は常に避けるべきです.

于 2012-08-02T15:02:10.520 に答える