【问题标题】:ASP.NET TreeView code that works in all browsers except Firefox适用于除 Firefox 之外的所有浏览器的 ASP.NET TreeView 代码
【发布时间】:2012-07-15 16:37:41
【问题描述】:

以下 .NET 4.0 代码在 IE9、Chrome 20 和 Opera 12 中完美运行,但在 Firefox 13 中却惨遭失败。所有浏览器都是默认安装,没有插件。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <asp:TreeView ID="Treeview1" Runat="server" 
            onclick="javascript:postBackByObject()"
            ontreenodecheckchanged="Treeview1_TreeNodeCheckChanged" 
            ShowCheckBoxes="All" >
            <Nodes>
              <asp:TreeNode Value="Child1" Expanded="True" Text="1">
                <asp:TreeNode Value="Grandchild1" Text="A" />
                <asp:TreeNode Value="Grandchild2" Text="B" />
             </asp:TreeNode>
               <asp:TreeNode Value="Child2" Text="2" />
               <asp:TreeNode Value="Child3" Expanded="True" Text="3">
               <asp:TreeNode Value="Grandchild1" Text="A" />
             </asp:TreeNode>
            </Nodes>
       </asp:TreeView>
       <asp:TextBox ID="TextBox1" runat="server" Height="156px" TextMode="MultiLine" 
            Width="295px"></asp:TextBox>
    </div>
    </form>
 </body>
  <script language="javascript" type="text/javascript">
      function postBackByObject() {
         var o = window.event.srcElement;
         if (o.tagName == "INPUT" && o.type == "checkbox") {
             __doPostBack("", "");
         }
     }
 </script>
 </html>

我正在尝试使用后面的代码来捕获 TreeNode 复选框事件:

  protected void Treeview1_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
  {
     TextBox1.Text += e.Node.Text;
  }

这很烦人 - 欢迎任何解决方案!

【问题讨论】:

    标签: c# javascript asp.net firefox treeview


    【解决方案1】:

    尝试更通用地处理该事件,以便它在 FF 和其他浏览器中都有效。

    例如

    onclick="javascript:postBackByObject(event)"
    
    function postBackByObject(e) {
        var evt = e || window.event;
        var o = evt.target || evt.srcElement; 
        if (o.tagName == "INPUT" && o.type == "checkbox") {
            __doPostBack("", "");
        }
    }
    

    edit 我忘了为 target / srcElement 添加一行

    【讨论】:

    • 非常感谢 Tim:代码现在可以在四大浏览器上完美运行。太好了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多