2017-05-27 48 views
3

我想问一问为什么会有多重响应?我怎样才能输入输入字段只有一个响应?javascript keypress多记录问题

期望:在输入字段中输入数据并按下回车键,它将执行操作。

$("#textInput").keypress(function (e) { 
 

 
    console.log("123"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 

 
<input type='text' id='textInput'/>

+0

[jQuery keypress事件在持有密钥时会重复触发 - 但不会在所有密钥上触发](https:// stackoverflow。com/questions/9098168/jquery-keypress-event-fires-repeated-when-key-is-held-but-not-all-keys) –

+3

我不同意重复的建议。 –

回答

0

的按键事件被发送到当浏览器登记键盘输入的元件。

- jQuery文档link

你真正想要的是.submit(),因为它们是在用户提交的信息将只触发了一个。

$("#textInput").submit(function (e) { 

console.log("123"); 
)}; 

或者,如果你只是想检测输入按键但不提交,使用此:
How to detect pressing Enter on keyboard using jQuery?

3

你在你的代码有语法错误。收盘应该});而不是)};

$("#textInput").keypress(function (e) { 
 
    if(e.which == 13) { 
 
     alert('You pressed enter!'); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="textInput">

0

我想,你应该选择其他的事件,像onblur解决您的问题

$("#textInput").on('blur',function (e) { 

    console.log("123"); 
)}; 

在你的代码,keypress事件给你在每个按键动作中输出,所以这就是你得到多个响应的原因

而接下来,如果你认为,如果你想按Enter按钮,然后需要响应,在这种情况下,小的变化将帮助你

$("#textInput").keypress(function (e) { 
    if(e.which == 13) { 
     console.log("123"); 
    } 


}); 
0

后市展望:输入数据输入字段,然后按回车它会执行这些操作。

为了尽快提交相应形式的用户输入的文本字符串和最终回车键,你可以:

  • 测试,如果当前字符是回车键(e.which == 13)
  • 得到closest形式
  • submit形式

$("#textInput").on('keypress', function (e) { 
 
    if (e.which == 13) { 
 
     $(this).closest('form').submit(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<form action="/action_page.php"> 
 
    Enter text and type enter to submit:<br> 
 
    <input type="text" name="textInput" value=""> 
 
</form>