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>
上的按键事件。只需监听 form
的 submit
事件并阻止默认提交过程
$('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>
我有以下两个文件 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>
上的按键事件。只需监听 form
的 submit
事件并阻止默认提交过程
$('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>