0

我在执行以下代码时遇到的问题,它将首先显示文本框的原始内容,然后是我按下的每组键,直到按下“Enter”。因此,如果文本框最初包含“Ice Cream - Pierre's Chocolate Chip”并且我单击文本框以获取焦点并将其替换为“茶”,我将获得 4 个警报框,每个警报框包含以下内容:

  1. 冰淇淋 - 皮埃尔的巧克力片

然后,如果我单击不同的行并执行其他操作,我会得到原来的 4 个警报框,然后是新的……它一直在堆积,我不知道为什么?

这是我的 .cs 文件中的一些代码 - 请注意我添加的“OnKeyPress”属性:

        public TCell(String celltext,String strTextBox,String strName)
        {
            int iWidth = 0;
            int intRandom =
            iWidth = Convert.ToInt32(strTextBox);
            tblCell = new TableCell();
            TextBox txtItem = new TextBox();
            txtItem.ID = strName;
            txtItem.Text = celltext;
            txtItem.Width = iWidth;
            txtItem.BorderStyle = BorderStyle.None;
            txtItem.CssClass = "cssAdjust trans";
            txtItem.Style.Add("padding", "0px 5px 0px 5px");
            txtItem.Attributes.Add("onKeyPress","captureTable(this.value);");
            txtItem.Attributes.Add("onFocus", "javascript:this.select();");
            tblCell.Controls.Add(txtItem);
        }

然后这里是我按下回车键后显示的功能:

 function captureTable(strValue) 
 {
     $(document).keypress(function (e) {
         if (e.which == 13) // Enter has been pressed.
         {
             e.preventDefault();
             document.getElementById("<%=HiddenField1.ClientID %>").value = strValue;
             alert(strValue);
         }
     });

提前感谢您能给我的任何帮助。我使用“window.event”进行了这项工作,但这将我从我阅读的内容中锁定在 IE 中,我正在尝试为此使用 JQuery。

(更新):

好的,我使用了下面 kmb385 提供的代码,但我认为我仍然缺少一些东西。我没有出现任何警报,所以我在 '$(".txtHook").keypress(function(e){' 行设置了一个断点,并且在表格文本框内的键输入期间它没有到达它,包括回车键。

这是代码位于 default.apsx 页面中的位置:

 <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

  <script type="text/javascript">

  $(document).ready(function(){ 
    $(".txtHook").keypress(function(e){ 
         if (e.which == 13) // Enter has been pressed.
         {
             e.preventDefault();
             document.getElementById("<%=HiddenField1.ClientID %>").value = $(this).val(); 
             alert(strValue);
         }
     });
  });

我将 JQuery 包含在网站母版页的正文标记中:

<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
            <Scripts>
                <asp:ScriptReference Path="~/Scripts/jquery-1.4.1.min.js" />
            </Scripts>
        </asp:ScriptManager>

(最后更新:)

原来我包含的 JQuery 是不正确的。我将其移至母版页的 head 标记并将代码更改为:

<script type="text/javascript" src="../scripts/jquery-1.4.1.min.js"></script>

之后,提供我的 kmb385 的代码开始工作:)

4

1 回答 1

0

您的原始 javascript 代码将匿名函数绑定到文档上的 keypress 事件,每次在您创建的输入中按下一个键。这导致每次在文档/页面上的任何位置按下一个键时都会触发多个函数。我删除了您对 .cs 文件中 onKeyPress 事件的绑定。同样在cs文件中,我向文本框添加了一个类属性,这样我就可以在jquery中挂钩它。

在 Javascript 中,我使用 jquery 中的类选择器将函数绑定到每个输入的按键事件。该函数获取输入的值并将其分配给隐藏的输入。此代码可能存在问题,因为我不熟悉 .net,如果有,请告诉我,我们可以解决它们。我对以下选择器持怀疑态度,但我猜它是 .net 的东西。

document.getElementById("<%=HiddenField1.ClientID %>").value

public TCell(String celltext,String strTextBox,String strName)
{
    int iWidth = 0;
    int intRandom =
    iWidth = Convert.ToInt32(strTextBox);
    tblCell = new TableCell();
    TextBox txtItem = new TextBox();
    txtItem.ID = strName;
    txtItem.Text = celltext;
    txtItem.Width = iWidth;
    txtItem.BorderStyle = BorderStyle.None;
    txtItem.CssClass = "txtHook cssAdjust trans";
    txtItem.Style.Add("padding", "0px 5px 0px 5px");
    txtItem.Attributes.Add("onFocus", "javascript:this.select();");
    tblCell.Controls.Add(txtItem);
}

Javascript

    $(document).ready(function(){
        $(".txtHook").keypress(function(e){
            if (e.which == 13) // Enter has been pressed.
            {
                e.preventDefault();
                document.getElementById("<%=HiddenField1.ClientID %>").value = $(this).val();
                alert(strValue);
            }
        });
    });
于 2012-04-14T23:48:49.250 回答