- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个“忘记密码”脚本,允许用户在收到电子邮件后重置密码。由于某种原因,我无法让它持续工作。它的工作率约为 70%,但有时仍会提供不正确的信息。
用户应该输入他们的用户名,然后创建一个新密码,然后验证新密码。该用户名与 PHP 文件中经过加盐和哈希处理的用户名进行比较。如果输入的用户名与经过加盐和哈希处理的用户名匹配,则用户名输入框旁边会出现一个复选标记。
只有当用户输入姓名的速度非常缓慢时,这种方法才能 100% 有效。我只是假设这是一个常见的 AJAX/JavaScript/jQuery 问题,但我可能是错的。如果用户缓慢输入姓名,那么当输入最后一个字母时,他们会得到一个复选标记。当用户快速输入名字时,我可以复制这个问题。十分之三的情况是,在他们输入最后一个字母后,即使他们输入了正确的用户名,系统也不会将其识别为正确的。如果他们删除最后一个字母,然后再次输入(与最后一个字母完全相同),它就会将其识别为正确的用户名。
我的 JavaScript 如下:
$( document).ready( function() {
var $usernameCheck = false;
var $newPass = false;
var $rNewPass = false;
$( '#user-name' ).keyup(function() {
$.get(
'forgot-compare.php',
{
compare1 : $( '#user-name' ).val(),
compare2 : $( '#forgotLink').val()
},
function(data) {
if ( data == "1" ) {
$usernameCheck = true;
$( '#u-check' ).removeClass().addClass( 'fa fa-check fa-lg check-green' );
}
else if (data == "2") {
$usernameCheck = false;
$( '#u-check' ).removeClass().addClass( 'fa fa-times fa-lg check-red' );
}
submitCheck();
}
);
setTimeout( submitCheck(), 3000);
});
$( '#new-pass' ).keyup( function() {
var $newPword = $( '#new-pass' ).val().length;
if ( $newPword >= 10 ) {
$newPass = true;
$( '#p-check' ).removeClass().addClass( 'fa fa-check fa-lg check-green' );
}
else if ( $newPword == 0 ) {
$newPass = false;
$( '#p-check' ).removeClass();
}
else if ( $newPword < 10 ) {
$newPass = false;
$( '#p-check' ).removeClass().addClass( 'fa fa-times fa-lg check-red' );
}
submitCheck();
});
$( '#retype-new-pass' ).keyup( function() {
var $rNewPword = $( '#retype-new-pass' ).val();
if ( $rNewPword == $( '#new-pass' ).val() ) {
$rNewPass = true;
$( '#r-check' ).removeClass().addClass( 'fa fa-check fa-lg check-green' );
}
else if ( $rNewPword != $( '#new-pass' ).val() ) {
$rNewPass = false;
$( '#r-check' ).removeClass().addClass( 'fa fa-times fa-lg check-red' );
}
submitCheck();
});
var submitCheck = function() {
if ($usernameCheck === true &&
$newPass === true &&
$rNewPass === true
) {
$('#pSubmit').removeProp('disabled');
}
else if ($usernameCheck === false ||
$newPass === false ||
$rNewPass === false
) {
$('#pSubmit').prop('disabled', true);
}
}
});
用户名正确、新密码至少为 10 个字符,并且重新输入的密码与新密码匹配后,页面上的提交按钮就会启用。否则,提交按钮将被禁用。
我也会把我的 PHP 和 HTML 放在这篇文章中(如果有人愿意,我仍然会这样做),但我可以通过快速输入用户名来完全复制问题,也可以通过输入来“解决”问题慢慢来。
似乎当用户快速输入用户名时,AJAX 调用会“自行绊倒”,并且对从最后一个按键输入中分配 $usernameCheck 变量的内容感到困惑。我以前在较小规模的项目中遇到过这个问题,但并没有真正关注它。现在这似乎是这个更大项目中的一个问题。
我尝试过的:-setTimeout 在脚本中的各个位置,以延迟运行 SubmitCheck() 函数的时间。没用。-.delay() 在脚本中的不同位置,目的与上面相同。没有成功。
我应该采取什么方法来解决这个问题?这是一个常见问题吗?一般的解决方案是什么?有没有一种方法可以让我在运行函数之前等待查看是否按下了更多按键? (也许,如果在最后500毫秒内没有按键,则运行JS函数)
最佳答案
考虑一下:我添加了一个检查,以便您在每次按键后等待 0.5 秒(您可以使用此值)。然后,如果用户在这 0.5 秒内按下按钮,您的超时将被重置,从而防止在该时间范围内多次提交。
$( document).ready( function() {
var $usernameCheck = false;
var $newPass = false;
var $rNewPass = false;
var myTimeout = null;
var checkUsername = function(){
$.get(
'forgot-compare.php',
{
compare1 : $( '#user-name' ).val(),
compare2 : $( '#forgotLink').val()
},
function(data) {
if ( data == "1" ) {
$usernameCheck = true;
$( '#u-check' ).removeClass().addClass( 'fa fa-check fa-lg check-green' );
}
else if (data == "2") {
$usernameCheck = false;
$( '#u-check' ).removeClass().addClass( 'fa fa-times fa-lg check-red' );
}
submitCheck();
}
);
}
$( '#user-name' ).keyup({
clearTimeout(myTimeout);
myTimeout = setTimeout(checkUsername, 500);
});
});
或者,您应该考虑取消之前的 ajax 请求。这是一种方法:
$( document).ready( function() {
var $usernameCheck = false;
var $newPass = false;
var $rNewPass = false;
var ajaxRequest = null;
var checkUsername = function(){
if(ajaxRequest !== null){
ajaxRequest.abort();
}
ajaxRequest = $.get(
'forgot-compare.php',
{
compare1 : $( '#user-name' ).val(),
compare2 : $( '#forgotLink').val()
},
function(data) {
if ( data == "1" ) {
$usernameCheck = true;
$( '#u-check' ).removeClass().addClass( 'fa fa-check fa-lg check-green' );
}
else if (data == "2") {
$usernameCheck = false;
$( '#u-check' ).removeClass().addClass( 'fa fa-times fa-lg check-red' );
}
submitCheck();
}
).always(function() {
ajaxRequest = null;
});
}
$( '#user-name' ).keyup({
checkUsername();
});
});
当然,您可以将超时和取消 ajax 请求合并到代码中。
关于javascript - AJAX 似乎比我的其他代码运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031550/
谁能帮我解决这个问题?我有一个 Tomcat 和简单的 JSF 应用程序:https://github.com/gooamoko/jsfbilling/ .当我在 Tomcat 上运行应用程序时,它运
我有两个这样的域类,第一个是 Manager : package com.mnm class Manager { String name; static hasMany = [ pro
当我运行以下代码时,打印输出似乎不正确。 void thread_Calc(int *pos) { printf("recieved %d\n", *pos); sig = -1; man
这个问题在这里已经有了答案: How to access a local variable from a different function using pointers? (10 个答案) 关闭
我编写了一个程序,其中列表构建器方法返回 IEnumerable of string,其中包括大量字符串(100 万个项目),我将其存储在 List of string 中,然后它将所有项目附加到 中
我正在尝试编写一个 IRC 类型的聊天客户端,它具有可以连接到服务器的客户端。我试图让它在本地 atm 上工作(使用 FIFOS 而不是套接字)。 我遇到了以下我似乎无法解决的问题: 接受新的客户端连
我的一个 cronjobs 每天发送一封电子邮件 35 6 * * * cd $EZPUBLISHROOT && $PHP runcronjobs.php -q 2>&1 我停止使用 cron sud
我使用 WPF 打印路径来处理在我们的应用程序中创建的大型图表。整个图表由视觉效果组成。 所谓的“DesignerPaginator”对图表进行分页(非常简单)。 从这一点来说,我做了以下三件事: -
我尝试在更新之前跟踪系统应用程序并使用: public static boolean isSystemApplication(Context ctx, IContent content) {
我在这里附上了一个查询分析结果,https://explain.depesz.com/s/x9BN 这是查询 EXPLAIN ANALYZE SELECT branche
我正在做一个 CXF(spring) 项目 (HUB)。部署后,我可以看到肥皂和休息服务列表,我通过两个地址打开它。一种是使用本地主机,第二种是使用我电脑的 ip。所以我得到了这些输出。 使用本地主机
这是一个 AnyHashable 不支持枚举转换的简单案例。 enum testEnum: String { case Test } let myObject: AnyHashable = t
我的主要目标是比较存储在数据库和 XLSX 文件中的数据。 为此,我按以下方式创建了两个列表: private class ProductList { public string produc
我从 CMake 3.6 更新到任何最新版本 (3.12.0-rc2),现在我的一个程序无法编译。 奇怪的是,错误消息显示了标准库本身中的 undefined symbol 。这是错误消息: Unde
我希望将我的自定义对话框动画化为从特定点出现,但我无法为对话框设置动画。 该对话框是一个基本的 RelativeLayout,设置为 extends Dialog 类中的布局。 正如这里的一些答案所建
我已经在这个论坛上调查过很多类似的问题,但似乎没有一个能解决我的问题。 我会在底部列出我在这个论坛上看到的一些问题页面,但让我先谈谈我对这个问题的看法。 我正在使用 codeigniter v 2.x
我正在尝试在 RHEL 7 上启动一个 docker-compose 项目作为 systemd 服务。这是我的 systemd 脚本 (/etc/systemd/system/wp.service):
这个问题已经有答案了: "Notice: Undefined variable", "Notice: Undefined index", "Warning: Undefined array key",
我正在尝试在 RHEL 7 上启动一个 docker-compose 项目作为 systemd 服务。这是我的 systemd 脚本 (/etc/systemd/system/wp.service):
此问题出现在my last question here之后。我想将每个按钮聚焦和失去焦点背景设置为主菜单(ContentPane 即 JPanel)下方的背景颜色,因此按钮看起来像选项卡。它在不同的环
我是一名优秀的程序员,十分优秀!