2

Backbone.js を使用すると、次のようなフォームがあります。

<form id="searchBar">
    <input type="search" name="search" id="searchBox" value=""/>
    <input type="text" name="location" id="location" value="City, ST"/>
</form>

そして、上記のフォームを次のように処理するビュー:

window.FindPlaceView = Backbone.View.extend({

    /*code here*/

    events: {
      "submit form#searchBar" : "processClick"
    },

    processClick: function(e) {
       e.preventDefault();
       console.log("Submitted");
       /*form processing code here*/
    }
});

フォームの 2 番目の入力フィールドを削除すると、入力時にフォームが送信されます。その 2 番目の入力をフォームに追加するとすぐに、サイコロはありません。その時点でバインディングが失われたように見えます。

フォームに 2 つのフィールドがあると、submit イベント バインディングでループがスローされる理由はありますか? これはばかげた問題のように思えます。私は頭を壁にぶつけています。

入力を別のタイプにして、すべての属性をすべて取り除いてみました。ここに空を入れても<input></input>壊れます。

(ここには送信ボタンがなく、入力時に送信しようとしていることに注意してください)

アイデア?

ありがとう。

4

1 に答える 1

8

あなたの問題はbackbone.jsとは関係ありませんが、ブラウザの仕組みは次のとおりです。

Jqueryのsubmitメソッドのドキュメントから:

ブラウザによっては、Enterキーを押すと、フォームにテキストフィールドが1つしかない場合、または送信ボタンが存在する場合にのみ、フォームが送信される場合があります。Enterキーが押されたときにkeypressイベントを監視することによって問題が強制されない限り、インターフェイスはこのキーの特定の動作に依存しないようにする必要があります。

もちろん、それについてはSOの質問があります:

そして、ここでは、送信ボタンなしでEnterキーを押してフォームを送信する方法のいくつかの回避策を見つけることができます。

于 2012-09-11T20:59:19.287 に答える