2

「デフォルトボタン」が望ましくなく起動するという古くからの問題の解決策が必要です。つまり、テキスト ボックスで Enter キーを押しましたが、起動したいボタンではない送信ボタンがフォームにありました (または、フォームをまったく起動したくない場合)。

次の「解決策」について疑問に思っています。少しハックですが、私が知る限り信頼できるはずです。

フォーム内で最初に目に見えないボタンがあります。次に、すぐに無効にするjquery。フォームで Enter キーを押すと、このボタンは「デフォルト ボタン」としてカウントされ、トリガーされますが、「false を返す」イベント ハンドラのために何もしません。

私が以前に見たソリューションは、keydown イベント ハンドラーや、一見複雑に見える/すべてのブラウザーでテストするのが難しいものに依存していました。

私の解決策 (これまでに見たことはありませんが、おそらくユニークではありません) ははるかに単純に見え、かなり信頼できると思います。サーバーがフォーム データでこのボタンを受信するため、javascript が無効になっていて誰かが Enter キーを押したかどうかもわかります。

<form action="/store/checkout" method="post">

    <input id="btnFakeSubmit" name="FakeSubmit" src="/images/pixel.gif"
     style="width:1px; height:1px; position:absolute;" type="image" /> 

        <script> 
            $('#btnFakeSubmit').click(function() {
                return false;
            });
        </script> 

このソリューションに関するアドバイス - すべてのブラウザでボタンを非表示にする最良の方法を含みます。

4

5 に答える 5

6

これは、ASP.netプロジェクトでこの問題を修正するために使用したものです。

<form runat="server" defaultbutton="DoNothing">
        <asp:Button ID="DoNothing" runat="server" Enabled="false" style="display: none;" />
于 2010-04-16T20:54:40.650 に答える
6

あなたができることの1つは次のとおりです。

  • 送信アクションをに設定しますjavascript: return false;
  • 送信ボタンを作成しない
  • 送信を行う別のボタンを作成します。フォーム上のアクションを実際のアドレスに変更する関数を呼び出しsubmit()てから、フォーム オブジェクトを呼び出します。

たとえば、次のようなものです。

<form id="myform" action="javascript: return false">
....
<input type="button" onclick="submit_myform">
...

function submit_myform()
{
   jQuery("#myform").attr("action", "post.php").submit(); //untested
}

この方法では、このボタンを明示的に押す以外にフォームを送信する方法はありません。

于 2009-11-07T06:13:16.313 に答える
0

質問: 複数の送信ボタンが必要な理由と、すべてのブラウザーで非表示にする必要があるのはなぜですか?

于 2009-11-07T06:15:12.427 に答える
0

あなたは(ほとんど)正しい軌道に乗っています。まず、送信ボタンが必要です。これは、フォームの最初の送信ボタンにする必要があります。

<input id="dummy" name="dummy" type="submit">

今それを非表示にします:

#dummy { display: none; }

そして送信を無効にします:

$(function() {
  $("#dummy").click(function() {
    return false;
  });
});

Javascript が無効になっている人に対応したい場合は、「ダミー」という名前の POST/GET (必要に応じて) 変数があるかどうかを確認します (これは、送信ボタンが実際に押された場合にのみ送信されるため)。受け取った場合は、フォームをそのままユーザーに返送してください。ただし、ほとんどの場合、Javascript が無効になっているユーザーに対応する努力をする価値はありません。

アクションや他のメソッドをいじってJavascriptが有効になっている場合にのみ、フォームの送信を許可することもできますが、(imho)これはおそらく扱いが難しすぎます。

于 2009-11-07T06:51:22.237 に答える
0
<script>
var statusSend = valse;
var checkSend = function(){return statusSend;}
</script>

<form id="myForm" action="/store/checkout" method="post" onSubmit="return checkSend();">
...
<button id="myButton">Send Data</button>
</form>

<script>
$("#myButton").click(function(e){
   e.stopPropagation();
   //check data ok
   statusSend = true;
   $("#myForm").submit();
});
</script>
于 2009-11-07T06:54:46.433 に答える