即使返回false,jQuery也会刷新页面

问题描述 投票:1回答:2
$("#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的下一个代码是否正确返回警报消息并且不会刷新页面。

javascript jquery
2个回答
2
投票

你的return在你的点击处理程序的另一个范围内,所以即使checkZeros返回false,你的点击处理程序也不会停止。

您可以使用以下代码:

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

这里使用了严格的比较,因为你的函数没有return trueand函数默认返回undefined

为了更好的可读性,您可以更改函数,以便它始终返回布尔值并将if简化为:

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

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


0
投票

您的单击处理程序回调未返回任何值,因为只有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;

})
© www.soinside.com 2019 - 2024. All rights reserved.