テキストボックスのEnterキーでJavaScriptを使用してボタンクリックをトリガーする

StackOverflow https://stackoverflow.com/questions/155188

質問

1つのテキスト入力と1つのボタンがあります(以下を参照)。テキストボックス内で Enter キーが押されたときにJavaScriptを使用してボタンのクリックイベントをトリガーするにはどうすればよいですか?

現在のページには別の送信ボタンが既にあるので、単にボタンを送信ボタンにすることはできません。そして、この1つのテキストボックス内で Enter キーが押された場合、それ以外は何もクリックしないようにします。

<input type="text" id="txtSearch" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />
役に立ちましたか?

解決

jQueryでは、次のように機能します。

$("#id_of_textbox").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#id_of_button").click();
    }
});

$("#pw").keyup(function(event) {
    if (event.keyCode === 13) {
        $("#myButton").click();
    }
});

$("#myButton").click(function() {
  alert("Button code executed.");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id="username" type="text"><br>
Password:&nbsp;<input id="pw" type="password"><br>
<button id="myButton">Submit</button>

または単純なJavaScriptでは、次のように動作します:

document.getElementById("id_of_textbox")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("id_of_button").click();
    }
});

document.getElementById("pw")
    .addEventListener("keyup", function(event) {
    event.preventDefault();
    if (event.keyCode === 13) {
        document.getElementById("myButton").click();
    }
});

function buttonCode()
{
  alert("Button code executed.");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Username:<input id="username" type="text"><br>
Password:&nbsp;<input id="pw" type="password"><br>
<button id="myButton" onclick="buttonCode()">Submit</button>

他のヒント

その後、コーディングするだけです!

<input type = "text"
       id = "txtSearch" 
       onkeydown = "if (event.keyCode == 13)
                        document.getElementById('btnSearch').click()"    
/>

<input type = "button"
       id = "btnSearch"
       value = "Search"
       onclick = "doSomething();"
/>

これを理解した:

<input type="text" id="txtSearch" onkeypress="return searchKeyPress(event);" />
<input type="button" id="btnSearch" Value="Search" onclick="doSomething();" />

<script>
function searchKeyPress(e)
{
    // look for window.event in case event isn't passed in
    e = e || window.event;
    if (e.keyCode == 13)
    {
        document.getElementById('btnSearch').click();
        return false;
    }
    return true;
}
</script>

ボタンを送信要素にすると、自動化されます。

<input type = "submit"
       id = "btnSearch"
       value = "Search"
       onclick = "return doSomething();"
/>

この作業を行うには、入力フィールドを含む<form>要素が必要です(Sergey Ilinskyに感謝します)。

標準の動作を再定義することはお勧めできません。 Enter キーは常にフォームの送信ボタンを呼び出す必要があります。

まだ誰もaddEventListenerを使用していないので、ここに私のバージョンがあります。要素が与えられた場合:

<input type = "text" id = "txt" />
<input type = "button" id = "go" />

次を使用します:

var go = document.getElementById("go");
var txt = document.getElementById("txt");

txt.addEventListener("keypress", function(event) {
    event.preventDefault();
    if (event.keyCode == 13)
        go.click();
});

これにより、HTMLをクリーンに保ちながら、イベントタイプとアクションを個別に変更できます。

  

<form>の外側にこれらの要素を入れたときにEnterキーを押してフォームを送信し、ページを再読み込みしたため、これがpreventDefaultの外にあることを確認する価値があります。数回点滅して発見しました。

     
    

補遺:@ruffinのコメントのおかげで、不足しているイベントハンドラーと<=>を追加して、このコードが(おそらく)フォーム内でも機能するようにしています。 (これをテストします。この時点で、括弧で囲まれたコンテンツを削除します。)

  

プレーンなJavaScriptでは、

if (document.layers) {
  document.captureEvents(Event.KEYDOWN);
}

document.onkeydown = function (evt) {
  var keyCode = evt ? (evt.which ? evt.which : evt.keyCode) : event.keyCode;
  if (keyCode == 13) {
    // For Enter.
    // Your function here.
  }
  if (keyCode == 27) {
    // For Escape.
    // Your function here.
  } else {
    return true;
  }
};

返信がjQueryのみで提供されることに気づいたので、プレーンJavaScriptでも何かを提供することを考えました。

これに使用できる基本的なトリックの1つですが、これについてはまだ詳しく説明していません。 ajaxアクション、またはEnterでその他の作業を行いたいが、実際にフォームを送信したくない場合は、次のようにします。

<form onsubmit="Search();" action="javascript:void(0);">
    <input type="text" id="searchCriteria" placeholder="Search Criteria"/>
    <input type="button" onclick="Search();" value="Search" id="searchBtn"/>
</form>

アクションの設定= <!> quot; javascript:void(0); <!> quot;これは、基本的にデフォルトの動作を防ぐためのショートカットです。この場合、Enterキーを押すかボタンをクリックするかに関わらずメソッドが呼び出され、データを読み込むためにajax呼び出しが行われます。

試してみてください:

<input type="text" id="txtSearch"/>
<input type="button" id="btnSearch" Value="Search"/>

<script>             
   window.onload = function() {
     document.getElementById('txtSearch').onkeypress = function searchKeyPress(event) {
        if (event.keyCode == 13) {
            document.getElementById('btnSearch').click();
        }
    };

    document.getElementById('btnSearch').onclick =doSomething;
}
</script>

Enterキーが押されるたびに検索をトリガーするには、これを使用します:

$(document).keypress(function(event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        $('#btnSearch').click();
    }
}
onkeydown="javascript:if (event.which || event.keyCode){if ((event.which == 13) || (event.keyCode == 13)) {document.getElementById('btnSearch').click();}};"

これはやや最近のプロジェクトで得たものです...ネット上で見つけたので、プレーンな古いJavaScriptにもっと良い方法があるかどうかはわかりません。

ただし、フォームにフィールドが1つと送信ボタンが1つしかない限り、ページに別のフォームがあってもEnterキーを押すとフォームが送信されるはずです。

その後、jsでフォームonsubmitをキャプチャし、必要な検証またはコールバックを実行できます。

これは、すべての YUI 愛好家のためのソリューションです。

Y.on('keydown', function() {
  if(event.keyCode == 13){
    Y.one("#id_of_button").simulate("click");
  }
}, '#id_of_textbox');

この特殊なケースでは、ボタン機能が挿入されたDOMオブジェクトをトリガーするためにYUIを使用した方が良い結果が得られました-これは別の話です...

Angular2 の場合:

(keyup.enter)="doSomething()"

ボタンに視覚的なフィードバックが必要ない場合は、ボタンを参照せずに、直接コントローラーを呼び出すことをお勧めします。

また、IDは必要ありません-ビューとモデルを分離する別のNG2方法。

html属性<!> quot; accesskey <!> quot;に気づいた人はいませんでした。しばらくの間利用可能です。

これは、キーボードショートカットなどにJavaScriptを使用しない方法です。

 accesskey_browsers

MDNのaccesskey属性のショートカット

このように使用することを意図しています。 html属性自体で十分ですが、ブラウザやOSに応じてプレースホルダーやその他のインジケーターを変更できます。このスクリプトは、アイデアを与えるためのテストされていないスクラッチアプローチです。小さな bowser

のようなブラウザライブラリディテクタを使用できます。

let client = navigator.userAgent.toLowerCase();
    isLinux = client.indexOf("linux") > -1;
    isWin = client.indexOf("windows") > -1;
    isMac = client.indexOf("apple") > -1;
    isFirefox = client.indexOf("firefox") > -1;
    isWebkit = client.indexOf("webkit") > -1;
    isOpera = client.indexOf("opera") > -1;
    input = document.getElementById('guestInput');

if(isFirefox) {
   input.setAttribute("placeholder", "Access keys: ALT+SHIFT+Z");
} else if (isWin) {
   input.setAttribute("placeholder", "Access keys: ALT+Z");
} else if (isMac) {
  input.setAttribute("placeholder", "Access keys: CTRL+ALT+Z");
} else if (isOpera) {
  input.setAttribute("placeholder", "Shortcut: SHIFT+ESCAPE->Z");
} else {'Point me to operate...'}
<input type="text" id="guestInput" accesskey="z" placeholder="Acces shortcut:"></input>

最新のJSでkeypressおよびevent.key === "Enter"を使用してください!

const textbox = document.getElementById("txtSearch");
textbox.addEventListener("keypress", function onEvent(event) {
    if (event.key === "Enter") {
        document.getElementById("btnSearch").click();
    }
});

Mozilla Docs

サポートされているブラウザ

この onchange の試みは近いが、 (Safari 4.0.5およびFirefox 3.6.3で)ブラウザーに対する前後の動作が正しくないため、最終的にはお勧めしません。

<input type="text" id="txtSearch" onchange="doSomething();" />
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />

この場合は、サーバーへの投稿からEnterボタンを無効にして、Jsスクリプトを実行します。

<input type="text" id="txtSearch" onkeydown="if (event.keyCode == 13)
 {document.getElementById('btnSearch').click(); return false;}"/>
<input type="button" id="btnSearch" value="Search" onclick="doSomething();" />
event.returnValue = false

イベントを処理するとき、またはイベントハンドラーが呼び出す関数で使用します。

少なくともInternet ExplorerとOperaで動作します。

jquery mobileの場合、

$('#id_of_textbox').live("keyup", function(event) {
    if(event.keyCode == '13'){
    $('#id_of_button').click();
    }
});

フォーム送信に関する@icedwaterの問題に対処した完全に単純なJavaScriptソリューションを追加するための完全なソリューション form で。

  

注:これは、IE9 +を含む<!> quot; modern browsers <!> quot;用です。 IE8バージョンはそれほど複雑ではなく、こちらで学習できます


フィドル: https://jsfiddle.net/rufwork/gm6h25th/1/

HTML

<body>
    <form>
        <input type="text" id="txt" />
        <input type="button" id="go" value="Click Me!" />
        <div id="outige"></div>
    </form>
</body>

JavaScript

// The document.addEventListener replicates $(document).ready() for
// modern browsers (including IE9+), and is slightly more robust than `onload`.
// More here: https://stackoverflow.com/a/21814964/1028230
document.addEventListener("DOMContentLoaded", function() {
    var go = document.getElementById("go"),
        txt = document.getElementById("txt"),
        outige = document.getElementById("outige");

    // Note that jQuery handles "empty" selections "for free".
    // Since we're plain JavaScripting it, we need to make sure this DOM exists first.
    if (txt && go)    {
        txt.addEventListener("keypress", function (e) {
            if (event.keyCode === 13)   {
                go.click();
                e.preventDefault(); // <<< Most important missing piece from icedwater
            }
        });

        go.addEventListener("click", function () {
            if (outige) {
                outige.innerHTML += "Clicked!<br />";
            }
        });
    }
});
document.onkeypress = function (e) {
 e = e || window.event;
 var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
 if (charCode == 13) {

        // Do something here
        printResult();
    }
};

ここに私の2セントがあります。 Windows 8用のアプリで作業しており、Enterボタンを押したときにボタンにクリックイベントを登録させたい。私はJSでこれをやっています。いくつかの提案を試みましたが、問題がありました。これは問題なく動作します。

jQueryで行うには:

$("#txtSearch").on("keyup", function (event) {
    if (event.keyCode==13) {
        $("#btnSearch").get(0).click();
    }
});

通常のJavaScriptで実行するには:

document.getElementById("txtSearch").addEventListener("keyup", function (event) {
    if (event.keyCode==13) { 
        document.getElementById("#btnSearch").click();
    }
});

最新の非推奨(keyCodeまたはonkeydownなし)JavaScript:

<input onkeypress="if(event.key == 'Enter') {console.log('Test')}">

簡潔さと現代のjsアプローチが好きな人のために。

input.addEventListener('keydown', (e) => {if (e.keyCode == 13) doSomething()});

input は入力要素を含む変数です。

jQueryでは、event.which==13を使用できます。 formがある場合は、$('#formid').submit()を使用できます(上記のフォームの送信に正しいイベントリスナーを追加します)。

$('#textfield').keyup(function(event){
   if(event.which==13){
       $('#submit').click();
   }
});
$('#submit').click(function(e){
   if($('#textfield').val().trim().length){
      alert("Submitted!");
   } else {
    alert("Field can not be empty!");
   }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label for="textfield">
Enter Text:</label>
<input id="textfield" type="text">
<button id="submit">
Submit
</button>

これも役立つかもしれません、小さなJavaScript関数で、うまく機能します:

<script type="text/javascript">
function blank(a) { if(a.value == a.defaultValue) a.value = ""; }

function unblank(a) { if(a.value == "") a.value = a.defaultValue; }
</script> 
<input type="text" value="email goes here" onfocus="blank(this)" onblur="unblank(this)" />

この質問は解決しましたが、他の人に役立つ何かを見つけました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top