, поэтому у меня есть якорные теги в виде <a href='[link'] rel='Tab'>
, и я применяю следующее при загрузке страницы :( я имею в виду 'document ready')
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');
}
UPDATE:
как Wrikken предложил jQuery (). live, я проверил его, и это именно то, что мне нужно, но я не могу заставить его работать на самом деле, в некоторых случаях он не будет работать. Для всех, кто написал разные решения, вам знаком .live (), если да, то почему я не могу использовать его здесь?
ЗАКЛЮЧЕНИЕ
Отдельное спасибо Фуджи, Патрику Д.В. и Виккену. Все ответы были полезны. .delegate () . работал для меня, но по какой-то причине .live () не сделал. кое-что о том, как jqGrid добавляет элементы в таблицу. Я собираюсь оставить вопрос открытым некоторое время. Еще раз большое спасибо за вашу помощь. +1 ко всем