2

他のすべての問題に加えて、奇妙な問題が発生します。ASP.NET MVC アプリケーションを作成しています。フレキシグリッドを使用しており、モーダル ダイアログを使用しようとしています。IE、Google Chrome、および Opera では、Client No コントロールでのみ数字を入力できますが、FireFox では何も入力できません。

コントロールのレンダリング方法は次のとおりです。

<div id="add-edit-dialog" class="ui-dialog-content ui-widget-content" style="width: auto; min-height: 0px; height: 622px;" scrolltop="0" scrollleft="0">
<form id="add-edit-form" novalidate="novalidate">
<fieldset>
<legend>Client Info</legend>
<input id="fntype" type="hidden" name="fntype" value="">
<input id="ClientId" type="hidden" value="" name="ClientId" data-val-number="The field ClientId must be a number." data-val="true">
<div class="editor-label" style="background-color: rgb(255, 255, 255);">
<div class="editor-field" style="background-color: rgb(255, 255, 255);">
<input id="ClientNumber" class="numericOnly input-validation-error" type="number" value="" name="ClientNumber" data-val-required="The Client No field is required." data-val-remote-url="/Client/doesClientNoExist" data-val-remote-type="POST" data-val-remote-additionalfields="*.ClientNumber,*.ClientId" data-val-remote="Client Number already exists. Please enter a different Client Number." data-val-number="The field Client No must be a number." data-val="true">
<span class="field-validation-error" data-valmsg-replace="true" data-valmsg-for="ClientNumber">

私は独自のクラス numericOnly と型番号 (Google Chrome でスピナーとして表示されます) を使用しています。

この方法で numericOnly クラスを定義する CardNumbers.js ファイルがあります。

$(".numericOnly").keypress(function (e) {
    if (String.fromCharCode(e.keyCode).match(/[^0-9]/g)) return false;
});

上記のコードは、StackOverflow の質問の 1 つで少し前に見つけたもので、他のブラウザーでも問題なく動作します。

では、ここで何が間違っているのか、なぜ FireFox でしか入力できないのか分かりますか?

4

3 に答える 3

3

この解決策を試してください。これがあなたが探しているものであることを願っています。

変えるだけ

から

if (String.fromCharCode(e.keyCode).match(/[^0-9]/g))

if(String.fromCharCode(e.which).match(/[^0-9]/g))
于 2013-01-17T04:13:13.757 に答える
2

これを試して:

$(document).ready(function() {
        $(".numericOnly").keydown(function(event) {
            // Allow: backspace, delete, tab, escape, and enter
            if ( event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 || 
                 // Allow: Ctrl+A
                (event.keyCode == 65 && event.ctrlKey === true) || 
                 // Allow: home, end, left, right
                (event.keyCode >= 35 && event.keyCode <= 39)) {
                     // let it happen, don't do anything
                     return;
            }
            else {
                // Ensure that it is a number and stop the keypress
                if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105 )) {
                    event.preventDefault(); 
                }   
            }
        });
    });
于 2013-01-17T04:39:16.077 に答える
1

これは、ブラウザの問題のように聞こえます。Firefoxが古くなっている場合は、[ヘルプ]>[バージョン情報]またはhttp://getfirefox.com/から更新してみてください。Firefox v18(リリースチャネルの最新版)のHTMLテストベッドに持って行ったところ、問題なく動作しました。

于 2013-01-17T03:54:44.360 に答える