javascript - 使用 and 运算符更改标志 bool 状态的问题

标签 javascript jquery

您能看一下this demo吗?并让我知道为什么我无法通过

正确更改 flag boolean (varproce = false;) 的状态
if (emailInput($('#email')) && emptyPass($('#password'))) {}

如您所见,我正在尝试检查 emailInput() AND emptyPass() 是否返回 inputData 然后将 bool 值更改为 true 但似乎代码仅在两个输入都为空时才对 emailInput() 起作用! (但是,如果用户填写电子邮件输入,则会显示密码错误消息)

$(function () {
    var proceed = false;
    var emailRegex = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    function emailInput(elem) {
        inputData = $.trim(elem.val());
        if (inputData == "") {
            elem.parent().after('<div class="alert alert-danger err" role="alert">Field Can Not Be Empty</div>').slideDown("slow");
        } else if (!emailRegex.test(inputData)) {
            elem.parent().after('<div class="alert alert-danger err" role="alert">Please Enter Valid Email Address</div>').slideDown();
        } else {
            return inputData;
        }
    }

    function emptyPass(elem) {
        inputData = $.trim(elem.val());
        if (inputData == "") {
            var $div = $('<div/>', {
                class: 'alert alert-danger err',
                role: 'alert'
            }).hide().text('No Empty');
            $div.insertAfter(elem.parent());
            $div.slideDown("slow");
        } else {
            return inputData;
        }
    }

    $("#login").on("click", function (e) {
        $(".err").hide();
        if (emailInput($('#email')) && emptyPass($('#password'))) {
            tempEmail = $('#email').val();
            tempPass = $('#password').val();
            proceed = true;
        }

        if (proceed) {
            var data = 'email=' + tempEmail + '&pass=' + tempPass;
            console.log(data);

        }
        e.preventDefault();
    });
});
@import url("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css");
body {
    padding:50px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<form accept-charset="UTF-8" role="form" id="login-form" method="post">
    <fieldset>
        <div class="form-group input-group" id="emailBox"> <span class="input-group-addon">
            @
          </span>

            <input class="form-control" placeholder="Email" name="email" type="email" id="email">
        </div>
        <div class="form-group input-group" id="passBox"> <span class="input-group-addon">
            <i class="glyphicon glyphicon-lock">
            </i>
          </span>

            <input class="form-control" placeholder="Password" name="password" type="password" id="password">
        </div>
        <div class="form-group">
            <button type="submit" id="login" class="btn btn-primary btn-block">Access</button>
            </button>
    </fieldset>
</form>

最佳答案

有两件事:首先,您需要使用 var 声明局部变量(proceedinputData)。其次,您需要了解 && 运算符仅在左侧表达式成功时才会计算右侧表达式。如果电子邮件地址为空或无效,则 && 将停止,并且根本不会测试密码字段。

您可以确保双方都经过这样的测试:

  var proceed = true;
  if (!emailInput($('#email')))
    proceed = false;
  if (!emptyPass($('#password')))
    proceed = false;

此后,仅当电子邮件地址和密码都正确时,proeed 才会为 true

Here is an updated version of your jsfiddle.

关于javascript - 使用 and 运算符更改标志 bool 状态的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430801/

相关文章:

javascript - 刷新 jQuery 函数

javascript - 如何在 React 中获取 Firestore 的文档 ID

javascript - 在从 dojo/-base/array.map 返回数组之前等待 dojo/request/xhr 完成

javascript - 单击与目标重叠的目标区域

javascript - html/javascript中三个图像的随机位置

javascript - 镜像功能做相反的事情

javascript - 为什么这个 JavaScript 不起作用?

javascript - 在 Angular 的同一页面上显示 View

javascript - Laravel:如何在每次单击图像时在与图像相关的弹出模式上显示动态数据

jQuery:在 blur() 事件之前触发 click()