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....
    })
});

一种解决方案是一张桌子......但是将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

一种方法是使用闭包。可以说,这将使用其当前值捕获in 中的变量。$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 .sibling').each(function( ind, el) {

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

});
于 2013-02-16T12:14:06.973 回答
1

试试这个

$('.element').each(function() {
    $(this).siblings('.sibling').change(function() {
       var mainElement = $(this).siblings('.element');
        // Play here
    });
});
于 2013-02-16T12:14:38.933 回答
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 回答