1

jQueryに焦点を合わせると、InternetExplorer9が2回実行されるようです。この問題は、古いバージョンのIEでは発生せず、FirefoxまたはChromeでは発生しません。

ユーザーに入力フィールドにコードを入力してもらいます。入力または送信すると、コードはロードを介して別のスクリプト(ajax)に送信されます。入力フィールドのコードが削除され、フォーカスが戻されます。

そのスクリプトの結果は、同じページのdivに挿入されます。

    $(document).ready(function(){
        $('#code').keyup(function(e){
            if(e.keyCode == 13){
                console.log('Code submitted through enter');
                sendcode($('#code').val());
            }
        });

        function sendcode(b){
            console.log('function sendcode used');
            $('#Result').load('scan.php?code=' + b);
            $('#code').val('');
            $('#code').focus();
        };

        $('#Submit').click(function(){
            console.log('Code submitted through click');
            sendcode($('#code').val());
        });
    });

ただし、focus()を削除すると問題がなくなるため、focus()が問題のようです。コードの任意の場所にfocus()を配置しようとしましたが、成功しませんでした。同じことを達成するfocus()の代替手段はありますか、それとも何らかの方法で修正できますか?

NETWORK:

URL: /scan.php?code=stackoverflow
URL: /scan.php?code=

CONSOLE: (when hit enter)
Log: Code submitted through click 
Log: function sendcode used 
Log: Code submitted through enter 
Log: function sendcode used 

2番目のロードにもコード変数が含まれていないことがわかります。

4

4 に答える 4

2

Submitボタンをspanまたはに変更しdiv、スタイルを設定します。

<span id="Submit">Submit</span>

デモ:フィドル

ボタン要素に属性を追加することが提案されているこの回答もご覧ください。type="button"

于 2013-02-07T09:32:55.523 に答える
2
    function sendcode(b){
        if(b){
            console.log('function sendcode used');
            $('#Result').load('scan.php?code=' + b);
            $('#code').val('');
            $('#code').focus();
        }
    };

それらの線に沿った何かが機能するはずです。多分そのb != undefinedようなものなら。Bがそこにあることを確認してください。

于 2013-02-07T09:33:17.917 に答える
1

関数をの外に置き、doc readyこれを試してください:

function sendcode(b){
  $('#Result').load('scan.php?code=' + b);
  $('#code').val('');
  $('#code').focus();
}

$(document).ready(function(){
    $('#code').keyup(function(e){
        if(e.keyCode == 13){
            sendcode($('#code').val());
        }
    });

    $('#Submit').click(function(){
        sendcode($('#code').val());
    });
});

またはこれを試してください:

.load()はjqueryのajaxメソッドの1つであるため、フォームの送信を停止する必要があります。そうしないと、ページが更新されます。

$('#Submit').click(function(e){
    e.preventDefault();
    sendcode($('#code').val());
});
于 2013-02-07T09:17:54.080 に答える
0

あなたが本当に、本当にそれを意味しない限り、キーストロークを傍受しないでください。確かに、スパンでボタンをエミュレートしないでください!HTMLには、理由のほかspanにタグがあります。div

あなたの問題は間違いなくIEのバグですが、それはあなたがうまく機能する組み込みの振る舞いをいじくり回すためにあなたが得るものです。フォームが送信されたときに起動するイベントハンドラーは1つだけ必要です。

$(document).ready(function(){
    function sendcode(b){
        console.log('function sendcode used');
        $('#Result').load('scan.php?code=' + b);
        $('#code').val('');
        $('#code').focus();
    };

    $('#form').submit(function(e) {
        e.preventDefault();
        sendcode($('#code').val());

    });
});

そして、率直に言って、JavaScriptに依存しない、よりアクセスしやすいフォームと、はるかに再利用可能なコードを作成できます。

$(document).ready(function(){
    $('#form').submit(function(e) {
        e.preventDefault();

        var $form = $(this);
        var data = $form.serialize();
        var action = $form.attr('action');
        $('#result').load(action + '?' + data);

        $('#code').val('').focus();
    });
});

これで、URLはフォームのaction属性(フォームのターゲットURLが入る場所)に存在し、JSはブラウザーのようにフォームの値をバンドルし、フォームをajax送信します。ユーザーがJSを無効にしている場合、フォームは正常に送信され、新しいページではありますが、引き続き有用な結果が得られます。コードは短く、URLエスケープの問題は自動的に処理され、ハードコードされた値は少なくなります。

于 2013-02-09T06:20:19.597 に答える