【问题标题】:How to disable paste option for string part only not for numeric?如何仅禁用字符串部分的粘贴选项而不禁用数字?
【发布时间】:2015-07-27 06:23:45
【问题描述】:

我有一个只接受数字的textbox。我已经完成了那部分,但问题是我无法禁用textbox 的粘贴选项,即onPaste="return false;"。因此,可以通过粘贴选项输入字符串。那么,如何禁用字符串部分的粘贴选项而不是数字?

function OnlyNumbers()
{
if (event.keyCode <= 46 || event.keyCode > 57 || event.keyCode == 47) event.returnValue = false;
}

<asp:TextBox ID="txtRecApr" class="txt" autocomplete="off" 
onKeyPress="OnlyNumbers()" onfocus="javascript:this.select();" 
runat="server" Width="60px" MaxLength="5" AutoPostBack="True" 
onPaste="return false;" ontextchanged="txtRecApr_TextChanged">
</asp:TextBox>

【问题讨论】:

    标签: javascript c#


    【解决方案1】:

    试试这个脚本。希望这对您有所帮助。

    <script type="text/javascript">  
    
                $(document).ready(function () {  
                    var keyDown = false, ctrl = 17, vKey = 86, Vkey = 118;  
    
                    $(document).keydown(function (e) {  
                        if (e.keyCode == ctrl) keyDown = true;  
                    }).keyup(function (e) {  
                        if (e.keyCode == ctrl) keyDown = false;  
                    });  
    
                    $('input[type=text]').on('keypress', function (e) {  
                        if (!e) var e = window.event;  
                        if (e.keyCode > 0 && e.which == 0) return true;  
                        if (e.keyCode) code = e.keyCode;  
                        else if (e.which) code = e.which;  
                        var character = String.fromCharCode(code);  
                        if (character == '\b' || character == ' ' || character == '\t') return true;  
                        if (keyDown && (code == vKey || code == Vkey)) return (character);  
                        else return (/[0-9]$/.test(character));  
                    }).on('focusout', function (e) {  
                        var $this = $(this);  
                        $this.val($this.val().replace(/[^0-9]/g, ''));  
                    }).on('paste', function (e) {  
                        var $this = $(this);  
                        setTimeout(function () {  
                            $this.val($this.val().replace(/[^0-9]/g, ''));  
                        }, 5);  
                    });  
                });  
            </script>
    

    编辑:

    我将简要介绍一下。正如您所说,您已经完成了仅接受数值的部分。所以,我不会专注于此。如您所见,我使用了replace(/[^0-9]/g, '')。它将替换所有在焦点输出和粘贴时与范围 0-9 不匹配的字符。 欲了解更多信息,请访问Here.

    【讨论】:

    • 这是一个相当大的脚本。您应该尝试解释它正在做什么来帮助其他新用户
    • 先生,它成功了。正如@jasonscript 所说,你能解释一下脚本吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多