【问题标题】:JQuery hasClass is not workingjQuery hasClass 不起作用
【发布时间】:2018-01-27 13:52:40
【问题描述】:

我正在学习 Jquery,我正在尝试检查 span 是否有某个类,这是有问题的 span

  <span class="recaptcha-checkbox goog-inline-block
                 recaptcha-checkbox-unchecked recaptcha-checkbox-checked
                 rc-anchor-checkbox recaptcha-checkbox-expired" role="checkbox"
        aria-checked="false" id="recaptcha-anchor" tabindex="0"
        dir="ltr" aria-labelledby="recaptcha-anchor-label">
    <div class="recaptcha-checkbox-border" role="presentation" style=""></div>
    <div class="recaptcha-checkbox-borderAnimation" role="presentation" style=""></div>
    <div class="recaptcha-checkbox-spinner" role="presentation"></div><div class="recaptcha-checkbox-spinnerAnimation" role="presentation"></div>
    <div class="recaptcha-checkbox-checkmark" role="presentation"></div>
  </span>

这个想法是检查&lt;span&gt;是否有recaptcha-checkbox-checked

关于documentation

“如果将类分配给一个元素,.hasClass() 方法将返回 true,即使其他类也是如此。”

所以我有以下内容:

captchaStatus: function () {
    return $("#recaptcha-anchor").hasClass("recaptcha-checkbox-checked")

}

即使元素有类,它也总是返回 false。

编辑:

var AddressValidatorHelper = {
    AddressValidator: function () {
        if (!AddressValidatorHelper.changedAddress && AddressValidatorHelper.clickedVerify
            && AddressValidatorHelper.captchaStatus() && ValidatorControls.validate()) {
            AddressValidatorHelper.noNormHide();
            return true;

        }
        else {
            if (!AddressValidatorHelper.alreadyAppended) {
                AddressValidatorHelper.noNormAppend();
                AddressValidatorHelper.noNormShow();
                AddressValidatorHelper.alreadyAppended = true;
            }
            if (AddressValidatorHelper.changedAddress) {
                AddressValidatorHelper.noNormShow();
            }
            if (AddressValidatorHelper.clickedVerify) {
                AddressValidatorHelper.noNormHide();
            }

            return false;
        }
    },

    noNormAppend: function () { $("#verDom").append("<label class='control-label' id='validarDom' style='color='#a94442'>Valide su domicilio</label>") },
    noNormShow: function () { $("#validarDom").show() },
    noNormHide: function () { $("#validarDom").hide() },
    changedAddress: false,
    clickedVerify: false,
    alreadyAppended: false,
    captchaStatus: function () {
        return $("#recaptcha-anchor").hasClass("recaptcha-checkbox-checked")

    }
}

所以我打电话给AddressValidatorHelper.captchaStatus()

【问题讨论】:

  • 添加一个显示返回错误的工作示例
  • 发布的代码按预期工作。请发布所有相关代码,以便我们提供更好的帮助。
  • div 元素内不应包含 span 元素。他们注定要反其道而行之。
  • “即使元素有类,它总是返回 false。” 这是不可能的。要么它没有类,要么你没有按照你认为的那样运行 .hasClass。
  • 我刚刚检查了我的一个使用recaptcha 的网站。在初始化之前,页面上不存在这些元素。如果您在使用后执行销毁逻辑进行清理,则会删除元素。所以在这一点上,我 99.99% 确定您只是遇到了时间问题。

标签: javascript jquery html


【解决方案1】:

请将你的js代码封装在jquery ready function

$(function(){
 //your has class checking code here 
})

【讨论】:

  • 你怎么知道不是?如果在他运行脚本时页面上不存在该元素,那么准备好的文档将无法拯救您。这不会阻止您的脚本在动态创建元素之前运行查找。
猜你喜欢
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2021-09-30
相关资源
最近更新 更多