我正在尝试将一些JQuery添加到现有的ASP.NET应用程序中。 div中包含一个通常隐藏的WebDataGrid,以及一个显示网格的按钮。
网格可能有也可能没有任何数据。我希望能够根据网格是否包含任何数据来更改显示网格的按钮的样式。问题是ig_controls似乎不包含document.ready()处理程序中的WebDataGrid对象。
以下是相关的HTML -
<div id="grids">
<ig:WebDataGrid ID="WebDataGrid1" ... />
<button type="button" class="btnClose">Close</button>
</div>
.
.
.
<button type="button" id="btnShow">Show</button>
和javascript -
$(function() {
function UpdateShowButton() {
// When called from the click handler, 'grid'is non-null,
// otherwise, 'grid' is null.
var grid = ig_controls.WebDataGrid1;
if (grid.get_rows().get_length() > 0) {
$('#btnShow').addStyle('hasItems');
} else {
$('#btnShow').removeStyle('hasItems');
}
}
// View the grid when clicked.
$('#btnShow').on('click', function() {
$('#grids').show();
}
// Hide the grid, and update the "Show" button
$('#btnClose').on('click', function() {
// Hide the grid
$('#grids').hide();
UpdateShowButton(); // This call works
}
// Finally, on postbacks, ensure the "Show" button is styled properly
UpdateShowButton(); // This fails
});
直接使用
获取网格var grid = $('#WebDataGrid')
在两个实例中都是非null,但是没有给我WebDataGrid对象,我不知道如何从原始HTML获取行数。
非常感谢任何帮助。感谢。
更新: 感谢Diego,这个问题可以解决。而不是这个 -
// Finally, on postbacks, ensure the "Show" button is styled properly
UpdateShowButton(); // This fails
我试过了 -
// Finally, on postbacks, ensure the "Show" button is styled properly
setTimeout(UpdateShowButton, 1);
是的,那是1.将对UpdateButton的调用延迟一毫秒会导致可以在ig_controls中访问WebDataGrid对象。
由于延迟时间不重要(并且该应用程序仅供内部使用)我不介意留下此代码。但我仍然想知道为什么需要解决方法,或者找到一个不能解决的问题看起来好像是个黑客。
答案 0 :(得分:1)
最可能的情况是,在某些时候,Infragistics网格的初始化使用了一些异步函数。通过使用毫秒延迟,您可以在Infragistic之后执行代码。实际的毫秒并非重要。
如果你想获得更清晰的代码,我会问Infragistics可以做什么或者发生了什么。
祝你好运!