仅当我的数据变量不为空时如何关注表单字段
How to focus on a form field only if my data variable is not empty
我一直在使用 php 和 ajax 来验证我的数据库中是否存在表单中插入的电子邮件。
我正在使用 jquery 将电子邮件值发送到我的 php 文件,如果找到电子邮件,则 return 发送一条消息。我的代码工作正常,但我希望如果找到电子邮件,光标将聚焦在 #usu_email 字段上,直到电子邮件被更改。在此之后,它应该允许我继续下一个字段。
这是我正在使用的 jquery 代码:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
success: function(data, textStatus) {
if (data !== null) {
$("#eresult").html(data);
$("#usu_email").focus();
}
},
});
};
我的问题是,如果我的数据库中不存在电子邮件,光标会一直关注我的#usu_email 字段,不允许我继续下一个字段。
对于此问题,我将不胜感激,因为我对 jquery 知之甚少。
取决于您期望的数据类型(简单文本响应或 JSON),但起初我会开始用 if(typeof data != "undefined" && data !== null && data != "")
替换您的 if(data !== null)
因为返回响应可能只是空的而不是 NULL。
如果它不起作用,你应该考虑将你的 php 代码添加到问题中,这样我们就可以在找不到匹配的电子邮件时 returns 准确地找出它是什么。
首先...您的条件if (data !== null)
总是为真,因为总会提供一个数据...可以是空字符串。
唯一没有 data
的情况是 Ajax 错误...并且条件甚至不会被评估,因为 success
回调不会执行.
接下来,我假设你的 Ajax 请求是在 $("#usu_email")
blur 上触发的...否则,我不知道你是如何实现的 «不允许我继续».
修改成这样比较一个响应:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
datatype: "json",
success: function(data) { // There is only one argument here.
// Display the result message
$("#eresult").html(data.message);
if (data.email_exist == "yes") {
$("#usu_email").focus();
}
if (data.email_exist == "no") {
// Something else to do in this case, like focussing the next field.
}
},
});
};
在 PHP 端,您必须提供 json 响应。它看起来像这样:
<?php
// You have this variable to compare against the database
$email = $_POST[usu_email];
// You say it is working.
// ...
// Then, you certainly have a result... Say it's $found (true/false).
// Build an array of all the response param you want to send as a response.
if($found){
$result[email_exist] = "yes";
$result[message] = "The submitted email already exist.";
}else{
$result[email_exist] = "no";
$result[message] = "A success message about the email here.";
}
// Add this header to the returned document to make it a valid json that doesn't need to be parsed by the client-side.
header("Content-type:application/json");
// Encode the array as a json and print it. That's what is sent in data as an Ajax response.
echo json_encode($result);
?>
注意不要重复任何其他内容。甚至没有空白 space 或一行 return.
我一直在使用 php 和 ajax 来验证我的数据库中是否存在表单中插入的电子邮件。
我正在使用 jquery 将电子邮件值发送到我的 php 文件,如果找到电子邮件,则 return 发送一条消息。我的代码工作正常,但我希望如果找到电子邮件,光标将聚焦在 #usu_email 字段上,直到电子邮件被更改。在此之后,它应该允许我继续下一个字段。
这是我正在使用的 jquery 代码:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
success: function(data, textStatus) {
if (data !== null) {
$("#eresult").html(data);
$("#usu_email").focus();
}
},
});
};
我的问题是,如果我的数据库中不存在电子邮件,光标会一直关注我的#usu_email 字段,不允许我继续下一个字段。
对于此问题,我将不胜感激,因为我对 jquery 知之甚少。
取决于您期望的数据类型(简单文本响应或 JSON),但起初我会开始用 if(typeof data != "undefined" && data !== null && data != "")
替换您的 if(data !== null)
因为返回响应可能只是空的而不是 NULL。
如果它不起作用,你应该考虑将你的 php 代码添加到问题中,这样我们就可以在找不到匹配的电子邮件时 returns 准确地找出它是什么。
首先...您的条件if (data !== null)
总是为真,因为总会提供一个数据...可以是空字符串。
唯一没有 data
的情况是 Ajax 错误...并且条件甚至不会被评估,因为 success
回调不会执行.
接下来,我假设你的 Ajax 请求是在 $("#usu_email")
blur 上触发的...否则,我不知道你是如何实现的 «不允许我继续».
修改成这样比较一个响应:
function getemail(value) {
var usumail = $("#usu_email").val();
$.ajax({
type: "POST",
url: "ajax_email.php",
data: "usu_email=" + usumail,
datatype: "json",
success: function(data) { // There is only one argument here.
// Display the result message
$("#eresult").html(data.message);
if (data.email_exist == "yes") {
$("#usu_email").focus();
}
if (data.email_exist == "no") {
// Something else to do in this case, like focussing the next field.
}
},
});
};
在 PHP 端,您必须提供 json 响应。它看起来像这样:
<?php
// You have this variable to compare against the database
$email = $_POST[usu_email];
// You say it is working.
// ...
// Then, you certainly have a result... Say it's $found (true/false).
// Build an array of all the response param you want to send as a response.
if($found){
$result[email_exist] = "yes";
$result[message] = "The submitted email already exist.";
}else{
$result[email_exist] = "no";
$result[message] = "A success message about the email here.";
}
// Add this header to the returned document to make it a valid json that doesn't need to be parsed by the client-side.
header("Content-type:application/json");
// Encode the array as a json and print it. That's what is sent in data as an Ajax response.
echo json_encode($result);
?>
注意不要重复任何其他内容。甚至没有空白 space 或一行 return.