0

次のコードを実行するときに発生する問題は、最初にテキストボックスの元の内容を表示し、次に「Enter」を押すまで押し上げたキーの各セットを表示します。したがって、テキストボックスに元々「アイスクリーム-ピエールのチョコレートチップ」が含まれていて、テキストボックスをクリックしてフォーカスを取得し、「お茶」に置き換えると、それぞれ次の内容の4つのアラートボックスが表示されます。

  1. アイスクリーム-ピエールのチョコレートチップ
  2. T
  3. お茶

次に、別の行をクリックして別の操作を行うと、以前の元の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);
        }

そして、Enterキーを押すと表示される関数は次のとおりです。

 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){'行にブレークポイントを設定しましたが、テーブルテキストボックス内のキー入力中にブレークポイントに到達しません、Enterキーを含みます。

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タグ内にあります。

<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のクラスセレクターを使用して、各入力のkeypressイベントに関数をバインドします。この関数は入力の値を取得し、それを非表示の入力に割り当てます。私は.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 に答える