当 DropDownList 的数据已加载/绑定到控件上时,是否有我可以使用的客户端事件?发生这种情况时,我需要在他们这边触发事件。
基本上,我试图在加载数据时锁定控件,就好像用户可以开始输入数据并在输入时失去焦点一样减速(并不少见)。
我尝试在标签中执行此操作,但位于那里的方法似乎在第一次回发后停止工作!(任何帮助将不胜感激)。作为一种解决方法,我尝试将事件附加到元素本身,虽然这适用于锁定,但使用 onchange 事件,我无法在数据成功加载后解锁它!
有任何想法吗?感谢到目前为止的答案:)
当 DropDownList 的数据已加载/绑定到控件上时,是否有我可以使用的客户端事件?发生这种情况时,我需要在他们这边触发事件。
基本上,我试图在加载数据时锁定控件,就好像用户可以开始输入数据并在输入时失去焦点一样减速(并不少见)。
我尝试在标签中执行此操作,但位于那里的方法似乎在第一次回发后停止工作!(任何帮助将不胜感激)。作为一种解决方法,我尝试将事件附加到元素本身,虽然这适用于锁定,但使用 onchange 事件,我无法在数据成功加载后解锁它!
有任何想法吗?感谢到目前为止的答案:)
由于数据将绑定在服务器端,因此您没有针对该特定事件的客户端事件,但是,页面已呈现,数据将在那里,因此您可能希望在document.load 事件,或者使用类似 jQuery 的 document.ready 事件。一旦页面(包括您绑定的下拉菜单)完成加载,这将触发您的脚本运行。
Jason 在这里是正确的,因为当此类事件发生时,您无法“通知”客户。您可以做的一件事是调用 Page.RegisterStartupScript() 方法,以便在页面完成加载后使用 JavaScript 执行某些操作(并且假设已经发生了完成数据绑定的回发)。同样,这假设您想在数据绑定完成后在客户端执行某些操作,而不是服务器端。
你能在你的应用程序中使用 ASP.NET AJAX 吗?如果是这样,您可以让选定的事件打开一个模式对话框,您可以在填充下拉列表时在其中显示“处理”文本。这样用户就无法访问任何其他控件,您可以放心地做您需要的事情。
我在我的网站的母版页中使用以下代码。这会阻止用户在完全绑定之前尝试使用控件。我发现如果控件没有完全绑定(连接速度慢),那么页面就会爆炸。
本质上,如果该页面未完成,脚本会劫持回帖。允许用户在页面完成处理之前不做任何事情。我在一年前写了这篇文章,它非常方便。
首先将 onload body 标签设置为 setdopostback()
将此添加到正文中的脚本块中。
var boolDoPostBack = false;
if (__doPostBack)
{
// save a reference to the original __doPostBack
var __oldDoPostBack = __doPostBack;
//replace __doPostBack with another function
__doPostBack = AlwaysFireBeforeFormSubmit;
}
function setdopostback()
{
boolDoPostBack = true;
}
function AlwaysFireBeforeFormSubmit (eventTarget, eventArgument)
{
var x= document.readyState
if (x != "complete")
{
if (x == "loading" || x == "interactive" || x == "unitialized" || x == "loaded")
{
//do nothing with IE postback
}
else if (!boolDoPostBack)
{
//do nothing with FireFox postback
}
else
{
//alert('Allow Postback 1');
return __oldDoPostBack (eventTarget, eventArgument);
}
}
else
{
//alert('Allow Postback 2');
return __oldDoPostBack (eventTarget, eventArgument);
}
}