vì vậy tôi có thẻ neo theo hình thức <a href='[link'] rel='Tab'>
và tôi áp dụng sau tại tải trang :('tài liệu sẵn sàng' Tôi có nghĩa)Cách liên kết hàm với các sự kiện DOM một lần và chỉ một lần để chúng không thực thi lần thứ hai trong khi kích hoạt sự kiện?
jQuery("a[rel*=Tab]").click(function(e) {
e.preventDefault();//then I do some stuff to open it in jq ui tab}
bây giờ vấn đề là khi tôi làm điều này và sau đó thông qua javascript mới liên kết được tạo ra, trong trường hợp của tôi với tải một trang thứ hai với JqGrid có mới <a rel='neoTab'>
's không tồn tại khi tôi lần đầu tiên chạy jQuery("a[rel*=Tab]").click(function(e)
để chúng không hoạt động ... vì vậy tôi có thể chạy jQuery("a[rel*=Tab]").click(function(e)
tại mọi sự kiện tạo liên kết mới nhưng sau đó các liên kết cũ sẽ tải nhiều tab để có cách nào tôi có thể chọn tất cả "a[rel*=Tab]
" không được chọn trước đó?
lưu ý: Tôi có thể giải quyết vấn đề này thông qua các chi tiết bên dưới, tôi chỉ nghĩ rằng có một số cú pháp mà tôi không biết.
chi tiết không cần thiết:
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: như Wrikken gợi ý jQuery() sống tôi đã kiểm tra nó ra và nó là chính xác những gì tôi cần, nhưng tôi không thể làm cho nó thực sự làm việc. , nó sẽ không hoạt động trong một số trường hợp. Đối với những người khác đã viết các giải pháp khác nhau, bạn có quen thuộc với .live() nếu vậy tại sao tôi không thể sử dụng nó ở đây?
KẾT LUẬN đặc biệt nhờ fudgey, patrick dw và wrikken. Tất cả các câu trả lời đều hữu ích. .delegate(). đã làm việc cho tôi nhưng vì lý do nào đó, .live() thì không. một cái gì đó về cách jqGrid thêm các yếu tố vào bảng. Tôi sẽ tiếp tục mở câu hỏi trong một thời gian. Cảm ơn rất nhiều lần nữa vì sự giúp đỡ của bạn. 1 cho tất cả
Bạn đã thử gì? Bạn có thể đăng mã không? Ngoài ra, các phần tử '' đang được thêm vào thùng chứa '# list' chưa? Tôi thực sự khuyên bạn nên sử dụng '.delegate()'. Nó giống như '.live()' nhưng bản địa hoá nó trên một vùng chứa cụ thể. Hiệu quả hơn theo cách đó. – user113716
@patrick yes Tôi đã kết thúc bằng cách sử dụng ủy quyền cho bây giờ vì mọi thứ đã được thêm vào #list. vì đó là id của bảng mà jqGrid đang làm việc. Tôi nghĩ rằng sẽ có một giải pháp tốt hơn với các phương pháp trong jqGrid vì vậy tôi sẽ chờ đợi một số câu trả lời từ các chuyên gia jqGrid và trong khi đó nghiên cứu nó nhiều hơn bản thân mình, nhưng tôi đã có mã làm việc cho đến nay. – Neo