-1

ほとんどの場合、disは重複している可能性があります。しかし、なぜこのエラーが発生するのかわかりません。私のスクリプトコード。

    $(document).ready(function () {        
            $(function () {
                $('input[name=Quantity]').blur(allownumbers);
            });

           function allownumbers() {
            alert('ad');
            var elements = document.getElementsByName('Quantity');
            alert(elements);
            for (var i = 0; i < elements.length; i++) {  
            if (elements[i].value == '' || elements[i].value < 1) {
                alert('Please enter a valid value');                    
                return false;
            }
            else if (elements[i].value > 100) {
                alert('Please enter a value less than 100');                
                return false;
            }
            }               
            return true;            
            }​
    });

私のページコード:

   <input id="Quantity" type="text" class="TxtBox" name="Quantity" value="@item.Quantity" onblur="return allownumbers()" maxlength="3"/> 

そして、私が持っているスクリプト参照は

<script src="~/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>  
<script src="~/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript">

私のコードの何が問題になっていますか。任意の提案..編集:

テキストボックスで呼び出さないと、関数は呼び出されません。

4

2 に答える 2

2

スクリプト参照を複製しました。各スクリプトを1回だけ含める必要があります(アクティブにデバッグおよび作成しているスクリプトでない限り、縮小バージョンが望ましい)。次に、初期化ルーチンにはいくつかの助けが必要です。

$(document).ready(function () {        
        $('input[name=Quantity]').blur(allownumbers);
});

function allownumbers() {
        alert('ad');
        var elements = document.getElementsByName('Quantity');
        alert(elements);
        for (var i = 0; i < elements.length; i++) {  
        if (elements[i].value == '' || elements[i].value < 1) {
            alert('Please enter a valid value');                    
            return false;
        }
        else if (elements[i].value > 100) {
            alert('Please enter a value less than 100');                
            return false;
        }
        }               
        return true;            
        }​

さて、allownumbersは元のブロックの外にある必要はありませんが、私にとってはスコープをクリーンに保つのに役立ちます。次に、$(document).readyは、ドキュメントが使用できる状態になっていることを確認するため、JQuery呼び出しに$(function(){})は必要ありません。

したがって、重複するスクリプト参照を排除すれば、問題はありません。

于 2012-11-01T15:12:53.410 に答える
1

関数はグローバルスコープに存在しませallownumbersん(これは最も外側のreadyハンドラー内に適切に含まれています。グローバルスコープはすでに十分に汚染されています)が、フィールドのマークアップのonblur="..."属性を介して接続された古いスタイルのDOM0ハンドラーはここにありますQuantityそれを探しています。そのため、フィールドがぼやけると、そのエラーが発生します。

後で(内部 readyハンドラーで)jQueryを介して既に正しくフックしているのでonblur、フィールドマークアップから属性を完全に削除するだけです。

その他の注意事項:

  • 2回使用していますready。最初は明示的に、次に関数参照をに渡すことによって暗黙的にそのコールバック内にあります$。これは同じものの省略形です。あなたは内側のものを取り除くことができます、それはその中の関数を呼び出すこと以外何もしていません。

  • 縮小されていないスクリプトと縮小されたスクリプトの両方を読み込んでいます。両方ではなく、1つのセットを選択してください。

于 2012-11-01T15:12:12.310 に答える