作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用ASP.NET 2.0中的Web应用程序,其中涉及几个GridView
元素。当用户单击网格中的某一行时,该行需要通过更改颜色来显示其选择。每行都设置了属性以标识其记录类型和唯一ID:
<tr data-elementType='myType' data-myID='12' onclick='selectionFunction();'></tr>
onclick
处理程序来完成选择:
selected
类
selected
类添加到新的选定行
console.log
语句放在选择函数的开头和结尾,在Firebug中,它们在延迟结束时很快地显示出来,这表明不是选择函数使事情变慢了。我在Firebug中使用了探查器,它说在ASP.NET生成的“ ScriptResource”脚本文件之一中定义的“
createCallback
”占用了绝大多数时间。什么是
createCallback
?为什么在Firefox 3.6中它这么慢?是FF中的错误,还是我可以解决的问题?
createCallback
中放置一个断点,以查看它在哪里被调用,当它中断时,从调用
removeClass
到调用堆栈中有几帧。这是Firebug中的堆栈外观:
createCallback()
-在ScriptResource.axd中?......
wherever possible trim: trim ? function(text=" ")
-在jQuery中
removeClass(value="selectedRow")
-在jQuery中
removeClass(classNames="selectedRow", speed=undefined, easing=undefined, callback=undefined)
-在jQueryUI中
selectionFunction()
-在我的.aspx页面中
onclick
addClass
/
removeClass
时,似乎此“ createCallback”函数被称为A LOT,并且在Firefox 3.6和Firefox 5中都在发生。它根本没有被调用,因此这似乎是Firefox。我在有问题的函数/行上放置一个断点,并选择了一行,断点得到了57次。只有前两个涉及到我呼叫
removeClass
和
addClass
;其余的在调用栈中有几次
createCallback
,有时也有
BeginRequestEventArgs
。我注意到当我将鼠标悬停在页面(选项卡)上的其他jQueryUI内容上时,当jQuery使用
addClass
和
removeClass
时,它也会被调用。但是,当我从事tr元素的工作时,为什么会被这么多次调用?
createCallback
都会被调用相同的次数。但是在那种情况下,这不是性能问题,探查器显示它仅占用大约30%的执行时间,而当我在较大的表上探查选择时,至少需要80%的执行时间。因此,当
createCallback
在页面上可见的更多内容中使用时,其性能似乎会更差。但是,看起来jQuery似乎不应该引起对
createCallback
的调用,尤其是因为在Firebug的脚本搜索中,我根本无法对它进行任何引用。它似乎只在Firefox中被调用!
createCallback
并设置一个断点(就在脚本中单击处理程序的下面,该断点以
Function.__typeName = "Function"; Function.__class = true; Function.createCallback = function (b, a)
开头并重新加载页面。我收到了很多调用。
最佳答案
我对ASP的了解很少,但是听起来您的问题纯粹是客户端。
声明每一行的“ onclick”事件不是处理被单击的行的最明智的方法。尤其是当您进入要谈论的行数时(〜700 +)。
更好的方法是将click事件处理程序添加到表中,并找出发生事件时单击的内容。我编写了一个应用程序,其中正在处理类似的尺寸表,但看不到单击时遇到的滞后现象。可能还有其他因素导致您的点击事件变慢,但是我仍然建议在任何情况下都应执行以下内容:
$(function(){
var rowSelectedClass = 'rowSelectedClass';
$('#myTableID').click(function(e){
if(e.target.nodeName === 'TD'){
var $tr = $(e.target).parent();
$('tr.' + rowSelectedClass).removeClass(rowSelectedClass);
$tr.addClass(rowSelectedClass);
// ....
// Do whatever else you want to do when the row is clicked
// ....
}
});
}
.live()
而不是
.click()
。
关于javascript - 当我在Firefox中使用addClass/removeClass时,javascript函数“createCallback”被调用了50次以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6768673/
我正在使用ASP.NET 2.0中的Web应用程序,其中涉及几个GridView元素。当用户单击网格中的某一行时,该行需要通过更改颜色来显示其选择。每行都设置了属性以标识其记录类型和唯一ID: 我通
我正在阅读《manning - asp.net ajax in action》这本书。在第 54-58 页描述了客户端委托(delegate)和回调。 简而言之: 使用客户端委托(delegate),
我是一名优秀的程序员,十分优秀!