我使用jQuery 1.6.2。当该元素出现在页面时,我想只调用一次click事件。这是我的选择器:
span[resizer='north'][title=''] :first-child"
这可以用于触发点击事件:
$("span[resizer='north'][title=''] :first-child").click();
我怎样才能让它只在网页上出现
后才能使用一次?答案 0 :(得分:0)
根据我对你上次评论的理解回答:我的意思是我只会调用点击事件一次。我们假设有一个按钮。我将调用该按钮的click事件一次。我的意思是我将以编程方式单击该按钮。
$('button').click(function() {
$('span[resizer='north'][title='']:first-child').click();
$(this).unbind('click');
});
答案 1 :(得分:0)
您可以使用DOMNodeInserted
事件来检测何时动态插入新元素。
var alreadyclicked = false; // variable to check that it will be clicked just once
$(document).bind('DOMNodeInserted', function(e) {
if (!alreadyclicked){
$("span[resizer='north'][title=''] :first-child").click();
alreadyclicked = true;
}
});
<强>更新
DOMNodeInserted
事件与其他mutation events一起被弃用。有些浏览器支持它,但看起来不会持续很长时间。
您可以使用mutation observers来跟踪DOM中的更改
var alreadyclicked = false;
var observer = new MutationObserver(function(mutations, observer){
//if new nodes were added
if( mutations[0].addedNodes.length && !alreadyclicked )
$("span[resizer='north'][title=''] :first-child").click();
alreadyclicked = true;
});
observer.observe( document, { childList:true, subtree:true });
答案 2 :(得分:0)
使用自定义事件,并使用.one()附加委托处理程序。
事件有2个组件,触发和处理。不要关注它被触发的次数,关注它处理的次数。
$("document").one("myclick", "span[resizer='north'][title=''] :first-child", function(e) {
do something...;
$(this).click(); //if you actually need the "click"
});
$("span[resizer='north'][title=''] :first-child").trigger("myclick");
这个例子意味着它被“处理”了一次。此处的其他答案可用于确保在文档准备就绪后添加元素时触发它。
您还可以使用pub / sub,这样可以更轻松。然后你只需要从ajax或任何可以添加元素的代码中触发自定义事件,而不必担心专门针对元素。订阅中的最后一行代码是取消订阅。