返回后执行Javascript语句

时间:2018-06-05 19:11:34

标签: javascript jquery

这是我的代码:

    $.each(json.ids, function(i, v) {
        if ($("#user").val() === v.username) {
            if ($("#pw").val() === v.password) {
                window.location = '/menu.html';
                return; //THIS RETURN
            }
            $("#errorblock").text("incorrect password").show().fadeOut(1000);
            return false;
        }
        event.preventDefault();
        $("#errorblock").text("no user found").show().fadeOut(1000);
    });

json是一个包含json格式数据的变量。奇怪的是,一旦你输入嵌套的if(if ($("#pw").val() === v.password)),窗口就会正确地改为menu.html,但是在更改窗口之前,“不正确的密码”或“找不到用户”这些词会闪烁。我可以用一些解决方法解决这个问题,但我很好奇为什么会发生这种情况 - 不应该返回只是停止执行代码?这里有一些语法(或其他)错误我应该修复以防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

不是在每个中执行逻辑,而是在处理之前先找到用户。

var username = $("#user").val();
var password = $("#pw").val();

//find the user based on their username
var user = $.grep(json.ids, function(user){
  return user.username === username;
});

//if you found a user, check their password
if (user.length) {
  if (user[0].password === password) {
    //redirect them for good case
    window.location = '/menu.html';
  } else {
    //show incorrect password message
    $("#errorblock").text("incorrect password").show().fadeOut(1000);
  }
} else {
  //no user found, do whatever
  event.preventDefault();
  $("#errorblock").text("no user found").show().fadeOut(1000);
}

但是,我应该注意,在前端执行密码验证是非常糟糕的主意