JQuery 和 PHP 按回车键进行处理

JQuery and PHP pressing enter to process

我有以下两个文件 request.php 和 response.php。我曾经使用按钮

发送请求
    <input type="button" value="Request message" onclick="post()"/>

但现在我正在考虑只使用 "Enter"(13) 键。

该代码有效,但它只显示几毫秒的结果。理论上 keydown 功能正在工作并从响应中获取结果,但我不知道为什么只持续了很短的时间。

有什么建议吗?

request.php

<script type="text/javascript">

function post(){
$("#message").keydown(function (e) {
    if (e.keyCode == 13) {
    var message=document.getElementById("message").value;
    $.post('response.php',{postmessage:message},
    function(data){
    var result = $('#post_message').html(data);
    console
return result; });
    }
});
}
</script>

<form>
Enter Message:<input type="text" id="message" name="message" onclick="post()"/><br/>
</form>
<div id="post_message"></div>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>

response.php

<?php
 function returnString() {
    $post_msg = $_POST['postmessage'];
    echo "Message entered ->", $post_msg ," <- here";
}
returnString();
?>

当您按下回车键时,表单即被提交。只需添加 e.preventDefault(),这样:

function post(){
$("#message").keydown(function (e) {

    e.preventDefault();

    if (e.keyCode == 13) {
    var message=document.getElementById("message").value;
    $.post('response.php',{postmessage:message},
    function(data){
    var result = $('#post_message').html(data);
    console
return result; });
    }
});
}

您正在尝试模仿默认情况下已经可用的行为 使用只有一个输入的表单。

因此您的表单正在提交并重新加载页面。

您不需要监听 <input> 上的按键事件。只需监听 formsubmit 事件并阻止默认提交过程

$('form').submit(function(e){
    e.preventDefault();    
    var msg = $('#message').val();

    mockPost(msg).then(function(res){        
      $('#post_message').append('<p>' + res + '<p>')
    });    

})


function mockPost(v){
   return new Promise(function(resolve){
        setTimeout(function(){
          resolve('Message= ' + v)
        }, 200)
   })
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
Enter Message:<input type="text" id="message" name="message"/><br/>
</form>
<div id="post_message"></div>

感谢您的建议。所以我最终得到了这段代码,就像@misorude 所建议的那样。只需添加一个 preventDefault 并在表单中使用提交。 我在提交时添加了一个 "onclick" 以防用户想要通过点击按钮提交。 response.php 保持不变。

request.php

<script type="text/javascript">

function post(){
    $('form').submit(function(e){
    e.preventDefault();    
    var message = $('#message').val();
    $.post('response.php',{postmessage:message},
    function(data){
    var result = $('#post_message').html(data);
    console
    return result; });
    });
}
</script>

<form>

Enter Message:<input type="text" id="message" name="message"/><br/>
<input type="submit" value="Submit" onclick="post()">
</form>
<div id="post_message"></div>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>