【问题标题】:jQuery refreshes page even with return falsejQuery即使返回false也会刷新页面
【发布时间】:2018-07-11 01:12:41
【问题描述】:
$("#submit").click(function()
{
    function checkZeros()
    {
        if ([0] == 0) {
            if ([1] != '.') {
                alert("alert message");
                return false;
            }
        }
    }

    checkZeros($("#user-input-currency").val());

    if(!$.isNumeric($("#user-input-currency").val())) {
        alert("Please provide price in numeric value");
        return false;
    }
})

我有一个函数可以检查用户输入货币的第一个数字是否为 0,后跟“。”如果没有,则发出警报,并返回 false 以便用户可以输入正确的值。但在我的情况下,我收到警报消息,但页面仍然刷新。 这里可能是什么问题? 下一个检查 isNumeric 工作正常的代码返回警报消息并且不刷新页面。

【问题讨论】:

  • 您的返回值在您的点击函数之外的另一个范围内,因此如果checkZeros 返回 false,您的点击处理程序仍将继续。

标签: javascript jquery


【解决方案1】:

您的return 位于您的点击处理程序之外的另一个范围内,因此即使checkZeros 返回false,您的点击处理程序也不会停止。

您可以改用以下内容:

if(checkZeros($("#user-input-currency").val() === false)) return false;

这里使用严格比较,因为您的函数没有return true,并且函数默认返回undefined

为了提高可读性,您可以更改您的函数,使其始终返回布尔值并将您的 if 简化为:

if(checkZeros($("#user-input-currency"))) return false;

p.s.:你的代码没有意义,是伪代码吗?

【讨论】:

  • 好吧,我认为它有效,谢谢,我找到了另一种方法,有人在此处发布但删除它,我认为是使用 preventDefault。但我更喜欢你的方式:)
  • 是的,它看起来很奇怪,因为它只是代码的一部分,是给我带来麻烦的部分
  • @ErickVazovsky 是的,他删除了它,因为有一些虚假陈述,preventDefault()return false 不完全相同。这是他的代码:pastebin.com/raw/mebUwMEs
【解决方案2】:

您的点击处理程序回调没有返回任何值,因为只有 checkZeros 函数返回 false 值。

因此,您必须将 checkZeros 函数返回的值返回给单击处理程序,以便它不会继续提交。

$("#submit").click(function() {

    function checkZeros() {
        if ([0] == 0) {
            if ([1] != '.') {
                alert("alert message");
                return false;
            }
        }
    }
    if (!$.isNumeric($("#user-input-currency").val())) {
        alert("Please provide price in numeric value");
        return false;
    }
    // in your case checkZeros function returns false, a function explicitly returns undefined if you haven't return any value, so you have to use conditional operator here
    return !checkZeros($("#user-input-currency").val()) ? false : true;

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多