所以我有<a href='[link'] rel='Tab'>
形式的 anchor 标记,并且在页面加载时应用了以下内容:(“准备好文档”是指)
jQuery("a[rel*=Tab]").click(function(e) {
e.preventDefault();//then I do some stuff to open it in jq ui tab}
现在的问题是,当我执行此操作并稍后通过javascript生成新链接时,以我为例,使用JqGrid加载第二页时,当我第一次运行
<a rel='neoTab'>
时不存在新的jQuery("a[rel*=Tab]").click(function(e)
,因此它们将无法工作。 ..因此,我可以在每次创建新链接的事件上运行jQuery("a[rel*=Tab]").click(function(e)
,但是旧链接将加载多个选项卡,所以有没有办法我可以选择之前未选择的所有“a[rel*=Tab]
”?注意:我可以并且已经通过算法方法解决了这个问题,您可以通过下面的详细信息看到,我只是认为有些语法我不知道,以防止需要使用此技巧!
不必要的详细信息:
var neoTabitStat = 0;
var openTabs = new Array();
openTabs[0] = 'inbox';
if(!(currentBox=='inbox'||currentBox=='outbox') ) {var currentBox = 'inbox';}
function initNeoTab(a){
if(neoTabitStat==0) {
jQuery("a[rel*="+a+"]").click(function(e) {
e.preventDefault();
tabIt(jQuery(this).attr('href')+'&nohead=1',jQuery(this).attr('title'),jQuery(this).attr('data-hovercard'));
});
neoTabitStat++;
}
}
function tabIt(a,b,c) {
c = typeof(c) != 'undefined' ? c : 0;
lastOpen = openTabs.length;
if(lastOpen<6) {
if(openTabs.indexOf(c)<0) {
openTabs[lastOpen] = c;
jQuery("#tabs").tabs("add" , a , b, lastOpen+1 );
}
$tabs.tabs('select', openTabs.indexOf(c) );
}else{
var tabErrDig = jQuery('<div style="display:hidden">You have opened the maximum amount of tabs please close one to open another tab.</div>').appendTo('body');
tabErrDig.dialog({width:500,title:'Maximum Tabs Opened',modal: true,
buttons: {
Ok: function() {
jQuery( this ).dialog( "close" );
}
}
});
}
}
jQuery(document).ready(function() { initNeotab('nameOfrelAttr4existingLinks'); }
myGrid = jQuery("#list").jqGrid({/*alot of stuff...*/} , gridComplete: function() { initNeotab('nameOfrelAttr4generatedLinks');
}
更新:
正如Wrikken建议的jQuery()。live,我检查了它,这正是我所需要的,但我无法使其真正起作用,在某些情况下它不起作用。对于编写其他解决方案的其他所有人,您是否喜欢.live()(如果可以),为什么我不能在这里使用它?
结论
特别感谢fudgey,patrick dw和wrikken。所有答案都是有帮助的。 .delegate()。为我工作,但由于某种原因.live()没有。有关jqGrid向表中添加元素的方式的一些信息。我要让这个问题待一会儿。再次非常感谢您的所有帮助。 +1全部
最佳答案
我本来建议使用 .one()
,但看来您正在动态添加链接。因此,最好将标记添加到已单击的链接中。正如Patrick所建议的那样,通过以下修改,代表将是最好的选择:
jQuery("#list").delegate( 'a[rel*=Tab]', 'click', function() {
if ($(this).is('.alreadyClicked')) { return false; }
$(this).addClass('alreadyClicked');
// do something
});