麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > JS > 正文

JQuery Dialog的內存泄露問題解決方法

2024-09-06 12:45:46
字體:
來源:轉載
供稿:網友
對于頁面來說,JQuery中的Dialog從效果上來說還可以,而且使用簡單,只要短短幾行綁定的代碼就可以實現彈出效果。
代碼
代碼如下:
$('#dialog').dialog({
autoOpen: false,
width: 600,
buttons: {
"Ok": function() {
$(this).dialog("close");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});

在一些JS交互性不多的一般頁面來說,沒有任何問題!但是對于交互性強的,需要動態加載與釋放DOM的頁面來說,它就是一個悲劇的東西!為什么這樣說?大家看下下面的例子:
  一段簡單的代碼,一個DIV是通過動態加載到頁面上,然后對該DIV用Dialog進行綁定,以達到彈出的目的!下面的test元素就是<div id="test"></div>。
代碼
代碼如下:
function TestAppend() {
$("#test").append('<div id="dialog"><div id="fileQueue"></div> <input type="file" name="uploadify" id="uploadify" />' +
'<a href="javascript:upload();">上傳</a>' +
'<a href="javascript:$(#uploadify).uploadifyClearQueue()">取消上傳</a><div>');
$('#dialog').dialog({
autoOpen: false,
width: 600,
buttons: {
"Ok": function() {
$(this).dialog("close");
},
"Cancel": function() {
$(this).dialog("close");
}
}
});
return false;
}

  接著,我需要刪除該DOM元素,一般來說,正常的做法都是$("#test").empty();這行簡單的代碼就完成了!這樣有效嗎?!當執行完這樣代碼后,你再用$('#dialog')來獲取dialog元素,郁悶的事情發生了,既然獲取到了!為什么!不是已經empty了嗎!
  下面我們來看下這一悲劇是如何造成的,
  我們把注意點放到$('#dialog').dialog上面,然后看看JQuery的實現代碼是如何寫的,當我們跟蹤代碼到dialog類中的_create方法的時候,問題的原因找到了,看下面這段代碼:
代碼如下:
uiDialog = (self.uiDialog = $('<div></div>'))
.appendTo(document.body)
.hide()
.addClass(uiDialogClasses + options.dialogClass)
.css({
zIndex: options.zIndex
})
// setting tabIndex makes the div focusable
// setting outline to 0 prevents a border on focus in Mozilla
.attr('tabIndex', -1).css('outline', 0).keydown(function(event) {
if (options.closeOnEscape && event.keyCode &&
event.keyCode === $.ui.keyCode.ESCAPE) {
self.close(event);
event.preventDefault();
}
})
.attr({
role: 'dialog',
'aria-labelledby': titleId
})
.mousedown(function(event) {
self.moveToTop(false, event);
}),

  它既然也動態創建一個div,而且把該div加到了Body上面,然后把dialog中的元素從<div id=test>中移除,加入到該新的div中.....
  這就是為什么我們$("#test").empty()后,卻對內部的dialog沒有起作用了!而且這有一個最不好的一個地方,也是最容易出現內存泄露的地方:它動態的在Body中創建了一個div,這樣如果窗體不關閉的話,而你又在不察覺的情況下不斷的使用上面的TestAppend方法來動態加載DOM,就會創建N個這樣的div!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中文区永久区 | chinesehdxxxx实拍| 久草在线视频网 | 久久精品视频一区 | 在线观看一区二区三区四区 | 国产伦久视频免费观看视频 | 成人在线网站 | 欧洲精品视频在线观看 | 免费毛片免费看 | 国产精品美女久久久免费 | 欧美人的天堂一区二区三区 | 久久经典视频 | 久草在线播放视频 | 久国产 | 91精品国产91久久久久久丝袜 | 免费看一级视频 | 亚洲3atv精品一区二区三区 | 国产精品自拍av | 午夜精品在线视频 | 精品亚洲二区 | 国产一区精品在线观看 | 一边吃奶一边摸下娇喘 | 看个毛片 | 色婷婷a | 欧美一级做性受免费大片免费 | 亚洲免费毛片基地 | 日韩毛片免费观看 | 一区二区三区欧美在线 | 免费国产在线视频 | 欧美成人一二三区 | 毛片免费观看视频 | 夏目友人帐第七季第一集 | 久草在线视频看看 | av免费在线不卡 | 国产成人精品免高潮在线观看 | 国产亚洲精品成人a | 一级片九九 | 欧美成人激情在线 | 欧美 中文字幕 | 在线成人免费观看www | h色视频网站 |