【问题标题】:if else statement has no effect - javascriptif else 语句无效 - javascript
【发布时间】:2023-08-08 02:14:01
【问题描述】:

我有一个包含注册表单的引导模式框。我添加了一些代码,使模式框在按下提交按钮时消失:

$(".dismiss-signup-modal").click(function () {
    jQuery('#signup_modal').modal('hide'); }
});

这很好用,但如果注册表单的电话号码字段为空白,我想让模式框保持原样,并且只有在电话号码字段有值时才会消失,如下所示:

$(".dismiss-signup-modal").click(function () {

    if ($('.signup-phone').length > 0) {

    jQuery('#signup_modal').modal('hide'); }

    else {}
});

但是上面的代码没有做任何事情,如果电话号码字段留空,模态框仍然会消失。我已经尝试了所有我能想到的将 if else 语句放在函数之外或创建新函数或将 .signup-phone 变为 var 但没有任何效果的组合,有什么想法吗?谢谢

【问题讨论】:

    标签: javascript jquery twitter-bootstrap if-statement bootstrap-modal


    【解决方案1】:

    您需要检查值的长度..

    但是您是在 检查 jQuery 对象是否存在 (如果元素存在与否)

    应该是

       if( $('.signup-phone').val().length > 0 ) {
    

    $('.signup-phone').length 将始终大于一,因为该元素已被压入页面。所以条件总是为真。

    【讨论】:

    • 这个。顺便说一句,解释为什么 $('.signup-phone').length > 0 是错误的:检查 $(selector) 的 .length 与 “此选择器是否存在?” 相同。所以你需要用val()来获取选择器9的值,看看上面有没有写什么。
    • 更好的说法是选择器匹配的元素个数等于jQuery对象的长度。通过检查它是否大于零,它变成了存在性检查。
    • 很高兴有帮助:)
    【解决方案2】:

    JQuery 对象的长度不同于 DOM 元素的长度。 JQuery.length 为您提供包含元素的计数,而不是输入元素值的长度。所以:

    $('.signup-phone').length;
    

    应该是 1 的值,因为在类 'signup-phone' 中找到了一个元素。你想要的实际上是元素值的长度:

    $('.signup-phone').val().length;
    

    【讨论】:

    • 你确定 re:length 是 jQuery 对象上的一个函数吗?可能需要重新阅读文档。
    【解决方案3】:

    我认为$('.signup-phone').length 指向的是元素的长度而不是它的值的长度。

    也许你可以试试这个:

    $(".dismiss-signup-modal").click(function () {
    
        if ($('.signup-phone').text.length > 0) {
        // or you could use 
        //if ($('.signup-phone').value.length > 0) {
        jQuery('#signup_modal').modal('hide'); }
    
        else {}
    });
    

    编辑:元素是指 JQuery 元素(s //如果选择器是对多个元素的引用)。

    【讨论】:

    • “元素的长度”是什么意思?更准确的说法是 jQuery 对象的长度等于它当前匹配的元素个数。
    • 抱歉让我误会英语是我的外语,我找不到更好的词来描述 JQuery 元素。