我需要做的是使用委託在每個匹配元素上獲得jQuery.one
的功能。是否有解除每個元素實例上的委託事件的方法?
正如你可以看到點擊鏈接「巴茲」或「蝙蝠」附加的「(刪除)」多次。另一方面,單擊「Foo」鏈接只執行一次代碼,但是也禁用「Bar」(反之亦然)。
小提琴:http://jsfiddle.net/JcmpN/
我希望發生的是,點擊任何一個執行該元素的處理程序,但保留其他完好,直到他們也被點擊一次。
HTML:
<ul id="product-list">
<li>
<span class="product-name">Foo</span>
<a href="#remove-foo" class="removeWithOne">Remove Product</a>
</li>
<li>
<span class="product-name">Bar</span>
<a href="#remove-bar" class="removeWithOne">Remove Product</a>
</li>
<li>
<span class="product-name">Baz</span>
<a href="#remove-baz" class="removeWithOn">Remove Product</a>
</li>
<li>
<span class="product-name">Bat</span>
<a href="#remove-bat" class="removeWithOn">Remove Product</a>
</li>
</ul>
的jQuery:
// this version removes the handler as soon as any instance is clicked!
$('#product-list').one('click.productRemoveOne', 'a.removeWithOne', function (e) {
var $this = $(this),
$name = $this.siblings('span.product-name');
e.preventDefault();
$name.text($name.text() + ' (removed)');
});
// this one executes the handler multiple times!
$('#product-list').on('click.productRemoveOn', 'a.removeWithOn', function (e) {
var $this = $(this),
$name = $this.siblings('span.product-name');
e.preventDefault();
$name.text($name.text() + ' (removed)');
});
這是你在找什麼? http://jsfiddle.net/j08691/JcmpN/1/ – j08691 2013-02-12 22:17:25