5

この種の状況を管理する最善の方法は何ですか :

$('.element').each(function() {

    $sibling = // find a sibling to $this.
    $mainElement = $(this); // memorize $(this)
    $sibling.change(function() {
       // when sibling changes
       // do something using $mainElement
       // problem is, $mainElement is not the element you think
       // $mainElement is the last .element found....
    })
});

1つの解決策はテーブルです...しかし、change()がeach()にネストされる利点はありません...

私のhtmlの例:

<div id="first">
  <span class="element"></span>
  <input name="first" type="text" />
</div>
<div id="second">
  <span class="element"></span>
  <input name="second" type="text" />
</div>

たとえば、この例で$sibling = $(this).next('input');は。

4

4 に答える 4

8

これを行う1つの方法は、クロージャーを使用することです。これにより、現在の値を使用して、いわば変数がキャプチャされます。$mainElement

$('.element').each(function() {

    $sibling = // find a sibling to $this.
    $mainElement = $(this); // memorize $(this)
    $sibling.change(function($mainElement) {
        return function() {
            // use $mainElement
        }
    }($mainElement))
});

jsfiddleの例(編集後は必ずテキストフィールドをぼかしてください。そうしないと起動し.change()ません)

于 2013-02-16T12:14:33.743 に答える
1

これで試してください

$('.element').each(function() {
    $(this).siblings('.sibling').change(function() {
       var mainElement = $(this).siblings('.element');
        // Play here
    });
});
于 2013-02-16T12:14:38.933 に答える
1
$('.element .sibling').each(function( ind, el) {

    $parent = $( el ).closest( '.element' );
    $( el ).change(function() {
         $parent.doSomething();
    });

});
于 2013-02-16T12:14:06.973 に答える
0

最も簡単な方法は、兄弟で .each を使用してから、兄弟の相対的な「.element」を見つけることだと思います。もちろん、あなたのコードに依存します。それ以外の場合は、.each のために少し冗長に感じますが、次のようなものが機能する可能性があります。

$('.element').each(function() {
    $(this).siblings('.sibling').change(function() {
        var mainElement = $(this).siblings('.element');
        // Do whatever you want here...
    });
});
于 2013-02-16T12:12:35.597 に答える