【问题标题】:Event not firing on dropdown list when disabled禁用时未在下拉列表中触发事件
【发布时间】:2010-12-29 07:16:41
【问题描述】:

这个客户端脚本被添加到我们现有代码库的按钮中。每当发生长时间运行的进程时,它基本上都会显示系统繁忙的弹出窗口。这适用于按钮,但是 btn.disabled = true 行会导致 SelectedIndexChanged 事件永远不会触发(在按钮上使用它时,点击甚至仍然会触发)。如果我注释掉那条线,它会很好地触发。该对象被禁用以防止双击。关于它为什么不开火的任何想法?此代码被注册为客户端脚本块,因此任何更改都会影响页面上使用此代码的所有按钮。

@"<script language='javascript' type='text/javascript'>
    function BB(btn, msg, btnID)
    {
         bb1 = new BusyBox('iBB1', 'bb1', 4, '" + ContentImageUrlPath + 
         @"/gears_ani_', '.gif', 125, 147, 207, msg);   
         btn.disabled = true;
         bb1.Show();
         __doPostBack(btnID,'');
         return false;
    }</script>";

这是页面上看到的代码

<select id="foo" onchange="return BB(this,
'Processing','ddlRoadsAssessment');
setTimeout('__doPostBack(\'foo\',\'\')', 0)" name="foo">

【问题讨论】:

  • 你可以为下拉列表提供第二个功能吗?
  • 我不知道,因为每页只能有一个客户端脚本块。

标签: asp.net javascript


【解决方案1】:

是的,如果它被禁用,那么 .NET 将假定它没有更改,甚至不会查看发布的值。您必须手动检查Request.Form[ddlRoadsAssessment.ClientID](例如OnInit)并将其与之前的值(例如,您可以将其存储在视图状态中)进行比较,如果它们不匹配,请手动调用方法。

【讨论】:

  • 如果确实如此,那么为什么button.click事件在设置为禁用时仍然会触发?
  • 我无法为 .NET 在所有情况下的工作方式辩护;我能希望的最好的结果就是能够告诉你它确实有效,不管有多少(或缺乏)产生同样效果的话语。一个疯狂的猜测,虽然:当一个回发被引起并且一个按钮是发件人时,.NET 很难否认它确实是可点击的事实。除此之外,您可以轻松验证这就是事情的工作方式。如果您创建一个&lt;asp:Textbox id="txt" runat="server" Enabled="false" /&gt;,并通过javascript更改它的值,然后创建一个回发,您将能够...
  • ... 让txt.Text == Request.Form[txt.ClientID] eval 为 false。
  • 这是它应该的工作方式吗?不,我想这很奇怪。例如,许多日期选择器使用通过 javascript ui 更改的禁用文本框。是它确实工作的方式吗?是的,当然了。虽然(可以理解)仅当 .NET 知道该控件被禁用时(不是在呈现页面后使用 javascript 禁用它时)
【解决方案2】:

我无法推测事件为什么不触发以及如何处理,但也许您可以使用readonly 而不是disabled

【讨论】:

  • 看起来 readonly 属性仍然允许单击按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2011-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多