11

Ajax Control Toolkit カレンダーによって拡張されたテキスト ボックスがあります。

ユーザーがテキストボックスを編集できず、代わりに入力にカレンダーエクステンダーを使用する必要があるようにしたいと考えています。

バックスペース以外のすべてのキーをブロックすることができました!

これは私がこれまでに持っているものです:

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="javascript: return false;" onKeyDown="javascript: return false;" onPaste="javascript: return false;" />

javascriptを使用してテキストボックス内のバックスペースも無効にするにはどうすればよいですか?

編集

JavaScriptで解決策が必要なので編集しました。

編集

onKeyDown="javascript: return false;" であることがわかりました。動作します。なぜ以前は機能しなかったのかわかりません。新しいテキストボックスを使用してみましたが、バックスペースがうまくブロックされました。担当者を得ることを望んで回答を投稿したすべての人に申し訳ありません。報奨金のマークを付けた後。

私のテキストボックスはすべてのキーストロークをブロックするようになり (どうやら)、カレンダーエクステンダーでも機能します。

4

10 に答える 10

38

ZX12Rが近かった。これは正しい解決策です:

TextBox は次のようになります。

    <asp:TextBox ID="TextBox1" runat="server" onKeyDown="preventBackspace();"></asp:TextBox>

スクリプトは次のようになります。

<script type="text/javascript">
    function preventBackspace(e) {
        var evt = e || window.event;
        if (evt) {
            var keyCode = evt.charCode || evt.keyCode;
            if (keyCode === 8) {
                if (evt.preventDefault) {
                    evt.preventDefault();
                } else {
                    evt.returnValue = false;
                }
            }
        }
    }
</script>

まず、キーを押してもバックスペースが通らないので、キーダウンを使用する必要があります。

于 2010-03-04T21:51:35.600 に答える
8

HTMLreadonly="readonly"属性だけを使用することはできませんか?

<input type="text" name="country" value="Norway"   readonly="readonly" />

<textarea rows="3" cols="25" readonly="readonly">
It should work! :)
</textarea>
于 2009-12-21T02:59:34.293 に答える
4

ディスプレイにラベルを使用し、非表示のテキスト ボックスを使用して値をサーバーに戻すのはどうですか?

于 2009-12-21T04:45:26.753 に答える
2

クライアント側コントローラーのみに読み取り専用を適用する必要があるため、asp.net はそれを認識せず、ポストバック時にデータを読み取ります。これにはいくつかの方法があります。jQuery を使用する場合の簡単な方法の 1 つは、テキスト ボックスにクラスを追加することです。cssclass="readonly"質問と回答で$(".readonly").attr("readonly", true);

于 2010-03-06T16:50:25.337 に答える
1

他の人が言ったように、 ReadOnly="True" はポストバックメカニズムを壊します。

PageLoad 中に Request オブジェクトに直接アクセスすることで、コード ビハインドで回避できると思います。

//assuming your textbox ID is 'txtDate'
if(Page.IsPostBack)
{
   this.txtDate.Text = Request[this.txtDate.UniqueID];
}

もう 1 つのオプションは、無効化されたコントロールがフォームにポストバックできるようにすることですが、スクリプトを介して変更された読み取り専用フィールドが戻ってくる可能性があるため、これはセキュリティ上の懸念事項です。

<form id="MyForm" runat="server" SubmitDisabledControls="True">
..
</form>

http://msdn.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlform.submitdisabledcontrols.aspx

このプロパティが ReadOnly (対 Enabled="False") コントロールに与える影響はわかりませんが、試してみる価値はあります。

そして最後に、私はあなたが数年前に抱えていたのと同じ問題に遭遇しました。私が覚えていることから、読み取り専用および runat="server" としてマークされた html 入力の使用と、ReadOnly である実際のサーバーサイド コントロールの使用には違いがあります。 ="真"。

私はやっているような気がします:

<input type="text" readonly="readonly" runat="server" id="myTextBox" />

コード ビハインドでは、コントロールを HtmlInputText または HtmlGenericControl 対 TextBox として扱う必要がありますが、データの通過を許可している可能性があります。ただし、必要なプロパティには引き続きアクセスできます。

とにかくちょっとしたアイデア...

于 2009-12-22T21:16:50.080 に答える
0

読み取り専用でも無効でもない通常のテキスト ボックスを使用し、クライアント側の JavaScript を使用してキー入力を無視します。これにより、すべてのキー押下が無視されるため、READONLY 動作が行われ、バックスペースも無視されます。

<input type="text" value="Your Text Here" onkeydown="return false;" />
于 2011-04-03T15:53:34.753 に答える
0

これが可能な解決策です...イベントリスナーを追加します...

<asp:TextBox ID="TextBox1" runat="server" onKeyPress="KeyCheck;" />

そして、関数は次のようになります..

function KeyCheck(e) {
 var KeyID = (window.event) ? event.keyCode : e.keyCode;
 if (KeyID == 8 ) {
    alert('no backspaces!!);
 }
}

onkeypressまたはonkeyupでなければならないかどうか疑問に思います...

于 2010-03-04T06:14:34.910 に答える
0

ReadOnly 属性は役に立ちません。テキストボックスが読み取り専用であっても、バックスペースはブラウザをバックページに移動させます..

于 2010-03-08T12:42:03.117 に答える
0

Jqueryを使用して、同様のことを行うことができました。参考までに載せておきます!

$("#inputID").keypress(function (e)
{e.preventDefault();});

$("#inputID").keydown(function (e)
{e.preventDefault();});

1 つ目はキー押下を防止し、2 つ目はキーダウン イベントを防止します。

まだJSの初心者なので、これについて良い/悪いことを自由に指摘してください.

于 2012-11-30T16:16:40.023 に答える
0

関数を呼び出す必要はなく、すべてこれを試してください:

<asp:TextBox runat="server" ID="txt" onkeydown="return false;" 
    onpaste = "return false;" onkeypress="return false;" />
于 2012-03-01T18:59:01.410 に答える