FineUI 官方论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

本论坛已关闭(禁止注册、发帖和回复)
请移步 三石和他的朋友们

FineUI首页 WebForms - MVC & Core - JavaScript 常见问题 - QQ群 - 十周年征文活动

FineUI(开源版) 下载源代码 - 下载空项目 - 获取ExtJS - 文档 在线示例 - 版本更新 - 捐赠作者 - 教程

升级到 ASP.NET Core 3.1,快、快、快! 全新ASP.NET Core,比WebForms还简单! 欢迎加入【三石和他的朋友们】(基础版下载)

搜索
查看: 9363|回复: 8
打印 上一主题 下一主题

【已解决】用户控件中如何正确使用JavaScript代码

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-4 16:20:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景:使用了两个一样的自定义控件(自定义控件类:WebUserControl1),且自定义控件内部设置了回车自动跳到下一个控件的功能;
           用按钮通过javascript对自定义控件内部的隐藏表单进行赋值。

总共两个问题:
1、页面上的第二个自定义控件当在4的位置敲回车就到第一个自定义控件里面去了。
2、点击”给值“之后能看到隐藏表单域里面的值,但在页面上点”取值“按钮获取不到。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
沙发
 楼主| 发表于 2014-7-4 16:47:24 | 只看该作者
随后的截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
板凳
 楼主| 发表于 2014-7-4 16:48:22 | 只看该作者
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="EmptyProjectNet20_FineUI.WebUserControl1" %>

  2. <f:Form ID="Form3" runat="server" BodyPadding="10px" ShowHeader="false" LabelWidth="120px" ShowBorder="false">
  3.     <Rows>
  4.         <f:FormRow ID="FormRow1" runat="server" ColumnWidths="26% 26% 26%">
  5.             <Items>
  6.                 <f:NumberBox ID="nm1" runat="server" Label="项1" Required="true" NextFocusControl="nm2">
  7.                 </f:NumberBox>
  8.                 <f:NumberBox ID="nm2" runat="server" Label="项2" MaxValue="100" MinValue="0" Required="true" DecimalPrecision="4" NextFocusControl="nm3">
  9.                 </f:NumberBox>
  10.                 <f:NumberBox ID="nm3" runat="server" Label="项3" MaxValue="100" MinValue="0" Required="true" DecimalPrecision="4">
  11.                 </f:NumberBox>
  12.                 <f:HiddenField runat="server" ID="hf001"></f:HiddenField>
  13.                 <f:Button runat="server" EnablePostBack="false" Text="给值" OnClientClick="SetV();"></f:Button>
  14.             </Items>
  15.         </f:FormRow>
  16.     </Rows>
  17. </f:Form>
  18. <script type="text/javascript" >
  19.     function SetV() {
  20.         var id = '<%=hf001.ClientID %>';
  21.         document.getElementById(id).value = "123";
  22.         alert(document.getElementById(id).value);
  23.     }
  24. </script>
复制代码
地板
 楼主| 发表于 2014-7-4 16:48:48 | 只看该作者
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;

  6. namespace EmptyProjectNet20_FineUI
  7. {
  8.     public partial class WebUserControl1 : System.Web.UI.UserControl
  9.     {
  10.         protected void Page_Load(object sender, EventArgs e)
  11.         {

  12.         }

  13.         public string GetValue()
  14.         {
  15.             return this.hf001.Text;
  16.         }
  17.     }
  18. }
复制代码
5#
 楼主| 发表于 2014-7-4 16:49:08 | 只看该作者
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="EmptyProjectNet20_FineUI.Test" %>

  2. <%@ Register Src="~/WebUserControl1.ascx" TagPrefix="uc1" TagName="WebUserControl1" %>
  3. <!DOCTYPE html>

  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head runat="server">
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  7.     <title></title>
  8. </head>
  9. <body>
  10.     <f:PageManager runat="server" />
  11.     <form id="form1" runat="server">
  12.     <f:Panel runat="server">
  13.         <Items>
  14.             <f:UserControlConnector runat="server">
  15.                 <uc1:WebUserControl1 runat="server" id="WebUserControl1" />
  16.                 <uc1:WebUserControl1 runat="server" id="WebUserControl2" />
  17.             </f:UserControlConnector>
  18.             <f:Button runat="server" ID="btnA" Text="取我" OnClick="btnA_Click"></f:Button>
  19.         </Items>
  20.     </f:Panel>
  21.     </form>
  22. </body>
  23. </html>
复制代码
6#
 楼主| 发表于 2014-7-4 16:49:28 | 只看该作者
  1. using System;
  2. using System.Collections.Generic;

  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;

  6. namespace EmptyProjectNet20_FineUI
  7. {
  8.     public partial class Test : System.Web.UI.Page
  9.     {
  10.         protected void Page_Load(object sender, EventArgs e)
  11.         {

  12.         }

  13.         protected void btnA_Click(object sender, EventArgs e)
  14.         {
  15.             string strA = this.WebUserControl1.GetValue();
  16.             FineUI.Alert.Show(strA);
  17.         }
  18.     }
  19. }
复制代码
7#
发表于 2014-7-4 17:05:00 | 只看该作者
给个ZIP包,也好调试
8#
 楼主| 发表于 2014-7-4 17:15:16 | 只看该作者
sanshi 发表于 2014-7-4 17:05
给个ZIP包,也好调试

在群里面有,这边太大放不上来
9#
发表于 2014-7-5 10:30:08 | 只看该作者
第一个问题是FineUI的BUG。

第二个问题是自身代码问题:由于页面包含两个相同的用户控件,所以生成的HTML代码也是两份,如下所示:
  1.     <div id="ctl04_wrapper">
  2.                
  3. <script type="text/javascript" >
  4.     function SetV() {
  5.         var id = 'ctl04_ctl00_WebUserControl1_Form3_FormRow1_hf001';
  6.         document.getElementById(id).value = "123";
  7.         alert(document.getElementById(id).value);
  8.     }
  9. </script>

  10.                
  11. <script type="text/javascript" >
  12.     function SetV() {
  13.         var id = 'ctl04_ctl00_WebUserControl2_Form3_FormRow1_hf001';
  14.         document.getElementById(id).value = "123";
  15.         alert(document.getElementById(id).value);
  16.     }
  17. </script>

  18.             </div>
复制代码

很明显,可以看出,第二个 SetV 的定义覆盖了第一个 SetV 的定义,所以页面上对 SetV 的调用只会对第二个控件中的隐藏字段赋值,当然在后台无法取到第一个用户控件中的隐藏字段值。

正确的做法是:
1. 把 SetV 移动到 页面中(test.aspx):
  1. <script type="text/javascript">
  2.         function setV(id) {
  3.             document.getElementById(id).value = "123";
  4.             alert(document.getElementById(id).value);
  5.         }
  6.     </script>
复制代码

2. 把用户控件中的 SetV 删除,然后在后台代码中:
  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (!IsPostBack)
  4.             {
  5.                 btnGeizhi.OnClientClick = String.Format("setV('{0}-inputEl');", hf001.ClientID);
  6.             }
  7.         }
复制代码

还要注意一点:这里只所以在 hf001.ClientID 后面又加个 -inputEl ,是由 HiddenField 生成 HTML 决定的(可以用浏览器调试工具看下生成的HTML结构)。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|FineUI 官方论坛 ( 皖ICP备2021006167号-1 )

GMT+8, 2024-11-25 23:02 , Processed in 0.047066 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表