我有一个实时点击功能,需要始终执行certian事项,但有一件事必须只在第一次点击时执行,之后,需要禁用它。
$('.theImage').live("click", function(){
// The commands within the if statement must only happen on the first click.
if (!chkHeightOnceOnly){
var containerHeight = $(this).children(".postInfo").height();
$(this).children(".postInfo").height(containerHeight - 2);
var chkHeightOnceOnly = true;
}
// other commands which need to fire on every click go here
});
所以目前每次点击div,它都会减去2px。它只需要第一次减去2px。
编辑 - 这是针对.theImage的许多实例,它们是通过ajax进入的,因此需要.live()
答案 0 :(得分:4)
如果您希望此内存属性基于每个节点,请使用每个节点的jQuery data
property:
$('.theImage').live('click', function() {
var $obj = $(this);
// Allow handler to run only once per element
if ($obj.data('chkHeightOnceOnly')) {
return;
}
$obj.data('chkHeightOnceOnly', true);
// Interesting stuff
var containerHeight = $obj.children('.postInfo').height();
$obj.children('.postInfo').height(containerHeight - 2);
});
答案 1 :(得分:4)
我会将标记存储在HTML标记本身中。
$('.theImage').live("click", function(){
// The commands within the if statement must only happen on the first click.
if ($(this).attr('data-once')!='already' ){
var containerHeight = $(this).children(".postInfo").height();
$(this).children(".postInfo").height(containerHeight - 2);
$(this).attr('data-once', 'already');
}
// other commands which need to fire on every click go here
});
答案 2 :(得分:1)
您应该在函数范围之外声明chkHeightOnceOnly
。目前,声明属于功能范围。这样,每次都会重置该值。
var chkHeightOnceOnly = false;
$('.theImage').live('click', function() {
if (!chkHeightOnceOnly) {
var containerHeight = $(this).children('.postInfo').height();
$(this).children('.postInfo').height(containerHeight - 2);
chkHeightOnceOnly = true;
}
});
答案 3 :(得分:0)
这是通过使用.live()
和仅用于一次性触发的特殊类的组合来实现此目的的另一种方法。第一次单击时,删除特殊类,使对象不再与.live()选择器规范匹配。
$(".fireOnce").live("click", function() {
$(this).removeClass("fireOnce");
// do your other stuff here
});
你可以在这里看到它:http://jsfiddle.net/jfriend00/KU6wZ/。