整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

零基础教你学前端-30、单选和多选

节课,我们实现表单中的单选和多选功能。

对于所有人而言,每天都会面临各种各样的选择。例如:1000W和北大录取通知书我该选哪一个?我是去考研还是去工作?地上有一张50元和一张100元,我要捡哪一张?

在HTML中如何实现单选和多选呢?

我们可以通过在 form 标签里,嵌入 input 标签,通过设置 input 标签的 type 属性值来实现单选和多选。

单选,type 的取值为 radio,radio 是收音机的意思,因为我们收听节目只能调到一个波段,因此用它来表示单选按钮,就是让用户在有限的选择中只选择一个。

多选,type 取值为 checkbox,译为复选框,也叫多选框,让用户在有限的选择中选择更多的选项。

我们来实现一个单选和多选的功能。

打开编辑器,新建一个 radio_checkbox.html 文件,自动补全基础代码,在body标签内部编写一个 form 表单标签,在 form 标签里面添加文本 选择性别: (冒号读出来) ,紧接着添加一个 input 标签,设置标签的 type 属性值为 radio,后面添加文本 "男",回车换行。

使用同样的方法,再添加一个 input 标签,设置标签的 type 属性值为 radio,后面添加文本 "女"。保存。


用浏览器打开页面,一组性别选择的单选框显示在页面中。使用鼠标点击单选控件,这时你会发现单选框出现了问题,性别居然能选择多个?

在这里需要提醒大家的是:

单选框控件必须成组使用才有意义,并且每组至少需要两个单选框。

而“组”是通过 name 属性来建立的,凡是 name 值相同的就是一组。

同组的单选框,只有一个会处在选中状态,其他的会自动呈现为未选中状态。

因此,如果没有给单选框设置 name 属性,默认每个单选框自成一组,一旦选中这个单选框,要想通过点击来解除选中状态就做不到了。


回到编辑器,为两个 input 单选框定义 name 属性,值设置为 gender。保存。

回到浏览器, 刷新。当我们再次点击性别选框的时候,单选的效果实现了。

返回编辑器,在单选框结尾处添加一个 br 标签。回车换行。

输入文本:前端基础包括:在文本后输入 input 中括号 type 等于 checkbox,input[type=checkbox] 按下 tab 键,创建三个多选框控件。

分别在每一个 input 复选框后面添加文本 HTML、CSS、JavaScript。保存。


回到浏览器,刷新,包含三个选项的复选框做好了。鼠标点击复选框,出现了对钩,表示已经选中,再次点击选中的复选框,取消选择。

我们再刷新一下页面,发现单选框和多选框在默认情况下,都没有选中。能不能在打开页面的时候,性别的男和前端基础的HTML,默认选中呢?

单选框和多选框默认选中效果,都可以通过定义 checked 属性来实现,它的值只要不为空,任何字符都可以,通常我们会使用 checked 字符串作为它的值。另外,选中和取消选中只有两个状态,所以也可以不用定义值,只定义一个属性名就可以了。

返回编辑器,给第一个单选控件添加 checked 属性,再给第一个多选控件添加 checked 属性。保存。

回到浏览器,刷新。性别HTML默认选中了。点击其他控件,单选多选的功能依然有效。

单选框和多选选框我们就讲完了,快自己实现一下吧。

文章配套视频链接点我「链接」

选按钮

单选按钮主要是让网页浏览者在一组选项里只能选择一个。代码格式如下。

<input type="radio" name=" " value=" " >

其中type="radio"定义单选按钮;name属性定义单选按钮的名称,单选按钮都是以组为单位使用的,在同一组中的单选项都必须用同一个名称;value属性定义单选按钮的值,在同一组中域值必须是不同。

(1)编写代码如下图所示,在<body>标签中加入以下代码。

(2)在浏览器中打开文件,预览效果图如下所示,即可看到5个单选按钮,用户只能同时选择其中一个。

复选框

复选框主要是让网页浏览者在一组选项里可以同时选择多个选项。每个复选框都是一个独立的元素,都必须有唯一的一个名称。代码格式如下。

<input type="checkbox" name=" " value=" " >

其中type="checkbox"定义复选框;name属性定义复选框的名称,在同一组中的复选框都必须用同一个名称;value属性定义复选框的值。

(1)编写代码如下图所示,在<body>标签中加入以下代码。

(2)在浏览器中打开文件,预览效果图如下所示,即可看到5个复选框,其中【人生大事】和【广告专区】复选框被选中。

习借助网络技术将旧的单选按钮转换为具有现代外观的单选卡。

单选按钮是表单的关键元素之一。当以正确的方式使用时,这些是惊人的,因为它们简化了从给定列表中选择一个选项的任务。但是默认的单选按钮看起来不太好。我们需要对其进行改造,使其在用户看来令人惊叹,这将显着改善网站的用户体验。

在本文中,我将逐步介绍如何在 Web 应用程序中实现自定义单选卡。在这里,我们将把旧的单选按钮变成漂亮的 CSS 卡片。每张卡片都有一个检查(勾号)图标,默认情况下它是隐藏的,并且仅在用户单击卡片时才会出现。

通过 3 个简单的步骤构建令人惊叹的无线电卡

  1. 使用 HTML 创建单选卡的布局。
  2. 使用 JavaScript 使无线电卡功能化。
  3. 使用 CSS 设计无线电卡。


第 1 步:使用 HTML 创建单选卡的布局

让我们为我们的单选卡设置一个基本的 HTML 布局。它将包括一个容纳卡片的容器。在其中,我们将添加三张卡片,每张卡片都有一个勾号(勾号)图标、一个卡片图标(图像)、一个卡片标签(标题)和一个卡片标签说明(附加内容)。每个无线电卡都有一个名为 radio-card 的通用类,为了使其正常工作,我们需要为每个无线电卡添加另一个独特的类,例如 radio-card-1、radio-card-2、radio-card-3 和很快。这些卡片将有一个 onclick 属性,该属性将调用名为 selectRadioCard() 的函数。在参数中传递卡号,如 1、2 或 3。我们将在下一步编写使卡片正常工作的逻辑。

将以下代码片段添加到您要实现自定义单选卡的部分。

<div>
    <h1>Create Stunning Radio Cards Using HTML, CSS, and JavaScript</h1>
    <div id="radio-cards-container">
        <!-- Radio Card 1 -->
        <div class="radio-card radio-card-1" onclick="selectRadioCard('1')">
            <!-- Radio Card Check (tick) icon. By default, its hidden. Will be displayed when card gets clicked. -->
            <div class="radio-card-check">
                <i class="fa-solid fa-check-circle"></i>
            </div>
            <!-- Section to display the icon, label, and some additional text -->
            <div class="text-center">
                <div class="radio-card-icon">
                    <img src="./images/icon-react.png" alt="React" />
                </div>
                <div class="radio-card-label">
                    React
                </div>
                <div class="radio-card-label-description">
                    Build an application using React.
                </div>
            </div>
        </div>
        <!-- Radio Card 2 -->
        <div class="radio-card radio-card-2" onclick="selectRadioCard('2')">
            <!-- Radio Card Check (tick) icon. By default, its hidden. Will be displayed when card gets clicked. -->
            <div class="radio-card-check">
                <i class="fa-solid fa-check-circle"></i>
            </div>
            <!-- Section to display the icon, label, and some additional text -->
            <div class="text-center">
                <div class="radio-card-icon">
                    <img src="./images/icon-angular.png" alt="Angular" />
                </div>
                <div class="radio-card-label">
                    Angular
                </div>
                <div class="radio-card-label-description">
                    Build an application using Angular.
                </div>
            </div>
        </div>
        <!-- Radio Card 3 -->
        <div class="radio-card radio-card-3" onclick="selectRadioCard('3')">
            <!-- Radio Card Check (tick) icon. By default, its hidden. Will be displayed when card gets clicked. -->
            <div class="radio-card-check">
                <i class="fa-solid fa-check-circle"></i>
            </div>
            <!-- Section to display the icon, label, and some additional text -->
            <div class="text-center">
                <div class="radio-card-icon">
                    <img src="./images/icon-vue.png" alt="Vue" />
                </div>
                <div class="radio-card-label">
                    Vue
                </div>
                <div class="radio-card-label-description">
                    Build an application using Vue.
                </div>
            </div>
        </div>
    </div>
</div>


第 2 步:使用 JavaScript 使无线电卡功能化

现在,我们需要实现当用户触发卡片上的点击事件时使单选卡片起作用的逻辑。 添加一个名为 selectRadioCard 的函数,它将接受一个名为 cardNo 的参数。 它将首先找到所有的无线电卡,然后遍历它们中的每一个,并删除选定的类。 之后,它将找到具有指定卡号的元素,如 radio-card-1、radio-card-2 或 radio-card-3,并将选择的类添加到其中。

在页面上的脚本元素中添加以下代码片段。 或者,您可以创建一个外部 JavaScript 文件并使用它。

const selectRadioCard = (cardNo) => {
    /**
     * Loop through all radio cards, and remove the class "selected" from those elements.
     */
    const allRadioCards = document.querySelectorAll(".radio-card");
    allRadioCards.forEach((element, index) => {
        element.classList.remove(["selected"]);
    });
    /**
     * Add the class "selected" to the card which user has clicked on.
     */
    const selectedCard = document.querySelector(".radio-card-" + cardNo);
    selectedCard.classList.add(["selected"]);
};


第 3 步:使用 CSS 设计无线电卡

由于我们已经完成了自定义单选卡的实现,我们需要添加一些 CSS 片段来设计我们的 HTML 内容的布局。

将以下代码片段添加到页面上的样式元素。 或者,您可以创建一个外部 CSS 文件并使用它。

#radio-cards-container {
    margin-top: 5rem;
    width: 75vw;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
}

.radio-card {
    border: 2px solid rgba(0, 0, 0, 0.1);
    border-radius: 10px;
    width: 300px;
    margin-right: 2rem;
    margin-bottom: 2rem;
    padding: 3rem;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
}

.radio-card:hover {
    border: 2px solid #016787;
    cursor: pointer;
}

.radio-card-check {
    display: none;
    position: absolute;
    top: 1.5rem;
    left: 1.5rem;
}

.radio-card-check i {
    font-size: 1.6rem;
    color: #016787;
}

.text-center {
    text-align: center;
}

.radio-card-icon img {
    width: 80px;
}

.radio-card-label {
    margin-top: 1rem;
    font-weight: 600;
    font-size: 1.2rem;
}

.radio-card-label-description {
    margin-top: 0.5rem;
    color: rgba(0, 0, 0, 0.7);
}

.radio-card.selected {
    border: 2px solid #016787;
}

.radio-card.selected .radio-card-check {
    display: inline-flex;
}


结果

您已完成学习如何使用纯 HTML、CSS 和 JavaScript 创建令人惊叹的单选卡。

关注七爪网,获取更多APP/小程序/网站源码资源!