首页 新闻 赞助 找找看

用了UpdatePanel控件后在Chrome浏览器中遇到问题

1
悬赏园豆:40 [已解决问题] 解决于 2013-01-07 11:06

我有一個頁面(http://waikee.comm01.com/xx.aspx)運行后,如下圖

就是先點擊TextBox1再點擊TextBox2,你可以看到兩個文本框中的內容都自動復制了。


上述問題是在Chrome中出現,而IE8中卻不會出現上述問題。
因我很多地方有用到類似這種方式的代碼,我想知道是什么原因引起的,需要找到對應解決方案。

頁面代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xx.aspx.cs" Inherits="xx" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
    <script type="text/javascript">
    function txt_onblur()
    {
        document.getElementById("Button1").click();
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ToolkitScriptManager runat="Server" EnableScriptGlobalization="true" EnableScriptLocalization="true" ID="ScriptManager1" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text="10" onblur="txt_onblur()"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server" Text="20" onblur="txt_onblur()"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button"/>
    </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>
后臺代碼(都沒內容):
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       
    }
}

walkingboy的主页 walkingboy | 初学一级 | 园豆:69
提问于:2013-01-07 09:42
< >
分享
最佳答案
0

在TextBox1獲得焦點有情況下,在TextBox1外部點擊,會執行腳本后觸發提交頁面,
沒有問題,但如果不在TextBox1外部點擊,而是在TextBox2中點擊,兩個文本框中的內容會自動復制。

 

这段话描述再清楚一点,听不懂

收获园豆:22
Rich.T | 老鸟四级 |园豆:3440 | 2013-01-07 09:54

頁面地址在這里(http://waikee.comm01.com/xx.aspx),您可以照我的說試一下.

就是先點擊TextBox1再點擊TextBox2,你可以看到兩個文本框中的內容都自動復制了。

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:01

@walkingboy: 

頁面地址在這里(http://waikee.comm01.com/xx.aspx),您可以照我的說試一下.

就是先點擊TextBox1再點擊TextBox2,你可以看到兩個文本框中的內容都自動復制了。

代碼是完整的,你可以看看效果圖

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:08

@walkingboy: 

我监控了一下,发现在Chrome里面事件被触发了两次,第两次发送给服务器的值是双份

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-07 10:11

@Rich.T: 

多謝,就是這個問題。那為什么會是第二次發給服務器的值是雙份的?

就是搞不懂這個問題!

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:14

@walkingboy: 

因为你文本1失去焦点触发了post,

同时你又点进了文本2再次触发post

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-07 10:18

@Rich.T: 

兩次請求不是分開的嗎?

怎么會疊加文本值呢?

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:20

@walkingboy: 

这个估计是chorme浏览器是这样的,两次请求在同一时间发出,估计他第二次也第一次也并进来了

你换了个事件来触发吧,不要用失去焦点

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-07 10:27

@Rich.T: 

那您有什么解決方法可以取消第二次請求嗎?我這里只需要一次請求就夠了。

因我很多地方都用到了類似的代碼。

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:34

@walkingboy: 

你试试这个方法:文本1得到焦点时,让文本2不能获取焦点(设为只读还是禁用,你自己试下)

这样应该就不会出事你这种情况了

Rich.T | 园豆:3440 (老鸟四级) | 2013-01-07 10:39

@Rich.T: 

好的,謝謝您,我測試一下。

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:43

@walkingboy: 

經測試,此思路可行,設為“禁用”即可,謝謝您。

walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:57
其他回答(1)
0

楼主你的图挂了

收获园豆:18
chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 09:47

已經修復,謝謝!

支持(0) 反对(0) walkingboy | 园豆:69 (初学一级) | 2013-01-07 09:51

@walkingboy: 

你的是在2个textbox中都写上了同样的blur的客户端代码,都是点击button,然后提交了。看你的后台也没有什么代码,怎么会有你说的问题呢? 是不是你的代码买有贴完全?

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 09:54

@chenping2008: 

就是先點擊TextBox1再點擊TextBox2,你可以看到兩個文本框中的內容都自動復制了。

代碼是完整的,你可以看看效果圖

支持(0) 反对(0) walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:09

@walkingboy: 

通过chrome开发者工具可以看到,你上述的操作,有了2次的请求发出。

IE下没有这样的问题。

也许是游览器处理的方式不一样。

还有就是写AJAX的话,可以考虑完全放弃微软的ajax框架。

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 10:15

@chenping2008: 

是可以不用微軟的Ajax,但我這里已經用了,而且有很多地方都用到了。

有一些計算問題,我必須要放到后臺代碼中去運行,以核對前臺數據的合法性。

支持(0) 反对(0) walkingboy | 园豆:69 (初学一级) | 2013-01-07 10:23

@walkingboy: 试一下这个:

<script type="text/javascript">
            function txt_onblur() {
                var v = document.getElementById("HiddenField1").value;
                if (v == "1") {
                    document.getElementById("HiddenField1").value = 0;
                    document.getElementById("Button1").click();
                }
            }
    </script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="TextBox1" runat="server" Text="10" onblur="txt_onblur()"></asp:TextBox>
        <asp:TextBox ID="TextBox2" runat="server" Text="20" onblur="txt_onblur()"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button"/>
        <asp:HiddenField ID="HiddenField1" runat="server" Value="1" />
    </ContentTemplate>
    </asp:UpdatePanel>
 protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                this.HiddenField1.Value = "1";
            }
        }
支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 10:52

@chenping2008: 如果楼主能够忍痛放弃的话,对以后的代码肯定有好处

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 10:54

@chenping2008: 

謝謝您,您的思路是好的,也是取消了第二的請求。

我最終采用了:文本1得到焦点时,让文本2不能获取焦点(设为禁用)

支持(0) 反对(0) walkingboy | 园豆:69 (初学一级) | 2013-01-07 11:05

@walkingboy: 那请问,你在什么时候开启了文本2 的焦点呢? 还有就是如果是点击文本2的时候,是不是也要让文本1失去焦点

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2013-01-07 11:07

@chenping2008: 

1.你在什么时候开启了文本2 的焦点呢?

這個,不太好處理,可能需要判斷是失去焦時鼠標所在的位置,不過我暫時好像沒出現這個問題,請求后禁用的狀態會自己取消。

2.还有就是如果是点击文本2的时候,是不是也要让文本1失去焦点

支持(0) 反对(0) walkingboy | 园豆:69 (初学一级) | 2013-01-07 11:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册