Enterキーを押してフォームを送信しようとしていますが、送信ボタンが表示されていません。すべてのブラウザ上ですべてを機能させたいので、可能であればJavaScriptを使用したくありません(私が知っている唯一のJSの方法はイベントを使用することです)。
現在のフォームは次のようになります。
<form name="loginBox" target="#here" method="post">
<input name="username" type="text" /><br />
<input name="password" type="password" />
<input type="submit" style="height: 0px; width: 0px; border: none; padding: 0px;" hidefocus="true" />
</form>
これはかなりうまくいきます。ユーザーがEnterキーを押したときに送信ボタンが機能し、ボタンがFirefox、IE、Safari、Opera、およびChromeに表示されません。しかし、それがすべてのブラウザを備えたすべてのプラットフォームで機能するかどうかを知るのは難しいので、私はまだ解決策が好きではありません。
誰かがより良い方法を提案できますか?それともこれはそれが得ると同じくらい良いですか?
試してください:
<input type="submit" style="position: absolute; left: -9999px"/>
それは画面の外に、左にボタンを押します。これでいいことは、CSSが無効になっているときには適切に機能が低下することです。
更新 - IE7のための回避策
タブがこのボタンに達するのを防ぐためにtabindex
でBryan Downing +によって提案されたように(Ates Goralによる):
<input type="submit"
style="position: absolute; left: -9999px; width: 1px; height: 1px;"
tabindex="-1" />
私はあなたがJavascriptルートにするべきであると思う、あるいは少なくとも私はそうする:
<script type="text/javascript">
// Using jQuery.
$(function() {
$('form').each(function() {
$(this).find('input').keypress(function(e) {
// Enter pressed?
if(e.which == 10 || e.which == 13) {
this.form.submit();
}
});
$(this).find('input[type=submit]').hide();
});
});
</script>
<form name="loginBox" target="#here" method="post">
<input name="username" type="text" /><br />
<input name="password" type="password" />
<input type="submit" />
</form>
これを試しましたか?
<input type="submit" style="visibility: hidden;" />
ほとんどのブラウザはvisibility:hidden
を理解していてdisplay:none
のようには実際には動作しないので、私はそれが問題ないはずだと思います。実際に自分でテストしていないので、CMIIWです。
送信ボタンがない別の解決策:
HTML
<form>
<input class="submit_on_enter" type="text" name="q" placeholder="Search...">
</form>
jQuery
$(document).ready(function() {
$('.submit_on_enter').keydown(function(event) {
// enter has keyCode = 13, change it if you want to use another button
if (event.keyCode == 13) {
this.form.submit();
return false;
}
});
});
将来この答えを見ている人のために、HTML5はフォーム要素の新しい属性hidden
を実装しています。これは自動的にあなたの要素にdisplay:none
を適用します。
例えば.
<input type="submit" hidden />
次のコードを使用します。これにより、3つすべてのブラウザ(FF、IE、およびChrome)での問題が修正されました。
<input type="submit" name="update" value=" Apply "
style="position: absolute; height: 0px; width: 0px; border: none; padding: 0px;"
hidefocus="true" tabindex="-1"/>
適切な値の名前と値を使用して、コードの最初の行として上記の行を追加します。
現在ボタンを隠すために使っているハックの代わりに、style属性にvisibility: collapse;
を設定するほうがずっと簡単です。しかし、フォームを送信するには、まだ少し簡単なJavascriptを使用することをお勧めします。私が理解している限りでは、このようなことへのサポートは今日ではどこにでもあります。
Hidden属性をtrueに設定するだけです。
<form name="loginBox" target="#here" method="post">
<input name="username" type="text" /><br />
<input name="password" type="password" />
<input type="submit" hidden="true" />
</form>
これを行う最も洗練された方法は送信ボタンを保持することですが、それをボーダー、パディングおよびフォントサイズを0に設定します。
これにより、ボタンの寸法が0x0になります。
<input type="submit" style="border:0; padding:0; font-size:0">
あなたはこれを自分で試すことができます、そして要素にアウトラインを設定することによってあなたはドットを見るでしょう、それは0x0 px要素を「囲む」外側の境界です。
可視性は必要ありません。隠されていますが、夜に眠るようになっている場合は、それをミックスに含めることもできます。
送信ボタンが表示されず、フォームに複数のフィールドがある場合、IEはフォーム送信のためのENTERキーの押下を許可しません。送信ボタンとして1 x 1ピクセルの透明画像を用意して、必要なものを追加します。もちろん、それはレイアウトの1ピクセルを占めるでしょう、しかしあなたがそれを隠すためにあなたがしなければならないことを見てください。
<input type="image" src="img/1x1trans.gif"/>
これは私のソリューションで、Chrome、Firefox 6、IE 7以降でテストされています。
.hidden{
height: 1px;
width: 1px;
position: absolute;
z-index: -100;
}
最も簡単な方法
<input type="submit" style="width:0px; height:0px; opacity:0;"/>
あなたもこれを試すことができます
<INPUT TYPE="image" SRC="0piximage.gif" HEIGHT="0" WIDTH="0" BORDER="0">
幅/高さ= 0ピクセルの画像を含めることができます
<input type="submit" style="display:none;"/>
これはうまく機能し、それはあなたが達成しようとしているものの最も明示的なバージョンです。
他のフォーム要素ではdisplay:none
とvisibility:hidden
の間に違いがあることに注意してください。
IEに問題がある人のために。
{
float: left;
width: 1px;
height: 1px;
background-color: transparent;
border: none;
}
HTML5ソリューション
<input type="submit" hidden />
私はそれをドキュメントレディの関数に追加しました。フォームに送信ボタンがない場合(私のすべてのJqueryダイアログフォームに送信ボタンがない場合)、それを追加してください。
$(document).ready(function (){
addHiddenSubmitButtonsSoICanHitEnter();
});
function addHiddenSubmitButtonsSoICanHitEnter(){
var hiddenSubmit = "<input type='submit' style='position: absolute; left: -9999px; width: 1px; height: 1px;' tabindex='-1'/>";
$("form").each(function(i,el){
if($(this).find(":submit").length==0)
$(this).append(hiddenSubmit);
});
}