【问题标题】:jQuery - Change class in HTML through Javascript by if/else ifjQuery - 通过 Javascript 通过 if/else if 更改 HTML 中的类
【发布时间】:2017-11-16 00:25:27
【问题描述】:

我有一个运行良好的引导验证表单,还可以更改 errorsuccess 上的 inputField 颜色。

问题是,我想更改标签text-colorborder-color。我尝试了各种 JavaScript 代码,但没有一个适合我,因为我不熟悉 javascript。

HTML

<form action="" class="form-horizontal form-bordered storyForm" novalidate>

<div class="form-body">
    <div class="form-group" id="form-group">
        <div class="controls">
            <label class="control-label" id="label" for="email">Email</label>
            <input type="email" id="email" class="form-control" name="email" required data-validation-required-message="This field is required">
        </div>
    </div>
    <div class="form-group" id="form-group">
        <div class="controls">
            <label class="control-label" id="label" for="password">Password</label>
            <input type="password" id="password" class="form-control" name="password" required data-validation-required-message="This field is required">
        </div>
    </div>
</div>

<div class="form-actions">
    <div class="row">
        <div class="col-md-12">
            <div class="row">
                <div class="offset-sm-3 col-md-9">
                    <button type="submit" id="submit" class="btn btn-success"> <i class="fa fa-check"></i> Submit</button>
                    <button type="button" class="btn btn-inverse">Cancel</button>
                </div>
            </div>
        </div>
    </div>
</div>

CSS

form.storyForm label{
  padding: 0px 25px;
  /* background-color: rgba(0,0,0,.15); */
  color: #000;
  border-radius: 4px 4px 0px 0px;
  border: 1px solid rgba(0,0,0,.15);
  border-bottom: 1px solid white !important;
  top: 1px;
  position: relative;
}
form.storyForm label.error{
  padding: 0px 25px;
  /* background-color: rgba(0,0,0,.15); */
  color: #ef5350;
  border-radius: 4px 4px 0px 0px;
  border: 1px solid #ef5350;
  border-bottom: 1px solid white !important;
  top: 1px;
  position: relative;
}
form.storyForm label.validate{
  padding: 0px 25px;
  /* background-color: rgba(0,0,0,.15); */
  color: #26dad2;
  border-radius: 4px 4px 0px 0px;
  border: 1px solid #26dad2;
  border-bottom: 1px solid white !important;
  top: 1px;
  position: relative;
}

我正在尝试添加/删除类的 javascript 代码

<script>
$(document).ready(function() {
    $("#submit").click(function() {
        if ($("#form-group").hasClass("error")) {
            $("#label").addClass("error");
        } else if ($("#form-group").hasClass("validate")) {
            $("#label").removeClass("error");
            $("#label").addClass("validate");
        }
    });
});
</script>

我还通过class 进行了检查,但它对我也不起作用

<script>
$(document).ready(function() {
 $("#submit").click(function() {
    if ($(".form-group").hasClass("error")) {
        $(".control-label").addClass("error");
    } else if ($("#form-group").hasClass("validate")) {
        $(".control-label").removeClass("error");
        $(".control-label").addClass("validate");
    }
 });
});
</script>

【问题讨论】:

  • 你的 Id 不是唯一的,id label 和 id form-group 是重复的 Id 应该是唯一的,因为它是标识符,如果你想对某些东西进行分类,请使用类
  • 我也用过ClassTag
  • 首先你不应该在你的文档中使用相同的 id 两次,其次是你需要修复你的 jquery 选择器,第三,你的 js 函数会做你想做的事情的机会是非常低,因为至少没有对我们可见的函数,它是第一次向元素添加类 validateerror,所以 if 和 else if 语句将始终为假......

标签: javascript validation input label bootstrap-4


【解决方案1】:

您在JavaScript 中使用'$',请确保您已包含JQuery 库。 '$' 是 JQuery 的主要基础对象(或函数)。如果您没有使用JQuery,则需要使用JavaScript 方法,例如.getElementById().querySelector(),并将您的id 值作为参数传递给这些方法。

此外,使用 querySelector 是解决此功能的更好方法。

这是MDN getElementById() documentationMDN querySelector() documentation 的链接。

我希望这会有所帮助!祝你好运!

【讨论】:

  • 我添加了JQuery lib v3.2.0。我也试过.getElementById()它也没有工作。
【解决方案2】:

ID 选择器仅在使用 javascript 时返回页面上具有匹配 ID 的 FIRST 元素。这是一个简单的代码笔演示:https://codepen.io/anon/pen/bYoqZP

您的嘶嘶声选择器绝对不应该是 ID 选择器:$('#xxxxxxx')。您应该将$('#label') 更改为只是一个元素选择器:$('label') 或选择类$('.control-label')。 您还为 form-group 使用了 ID 选择器,它也只会返回具有该 ID 的第一个元素,因此会阻止您的点击处理程序对第 2、第 3、...第 n 个表单组产生影响。

对于您提供的示例,没有任何内容可以解释您如何验证表单或添加您首先要查找的错误类。所以现在发生的事情是您正在扩展提交按钮的功能以提交表单调整类。问题是,当表单提交时,什么都不会发生,因为您没有任何操作,并且一旦用户单击提交,您就不会对您的数据做任何事情。

如果您将error 类添加到表单组并单击提交,您会看到您的更改生效,但您只需要更多代码来处理您的表单,以便真正执行任何操作。

【讨论】:

  • 所有选择器都很好。他id标签...你的答案不正确。
  • ID 选择器在使用 javascript 时只会返回页面上具有匹配 ID 的 FIRST 元素。这是一个简单的代码笔演示:codepen.io/anon/pen/bYoqZP
  • 更新了我的答案,以提供有关如何将其作为概念证明工作的更多信息。如果您以未在此处显示的方式处理表单,那就太好了!但是从您提供的内容来看,这是行不通的,因为没有添加您的初始错误类期间
猜你喜欢
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-20
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多