微信小程序实现多选功能

微信小程序实现多选功能的完整攻略可以分为以下步骤:

1.在页面中定义 checkbox 组件

首先需要在页面的 wxml 文件中定义多组 checkbox 组件,每个复选框都应该设置不同的 value 值以便于选项的区分,同时为了便于管理,可以用相同的 name 属性将多个选项组成一个组. 下面是一个示例代码:

<checkbox-group bindchange="selectedList">
  <label wx:for="{{list}}">
    <checkbox value="{{item.id}}" name="checkboxGroup">{{item.name}}</checkbox>
  </label>
</checkbox-group>

2.编写事件处理函数

当用户选择一个或多个复选框时,会触发 checkbox 组件的 change 事件,为了获取用户选择的结果需要在 js 文件中编写事件处理函数。当用户选择一个复选框时,事件处理函数会接收到一个事件对象,其中包含了详细信息,如选项的 value 值,是否选中等状态,可以通过调用 event.detail.value 来获取用户选择的 value 值。

Page({
  data: {
    list: [{
        id: 1,
        name: '选项1'
      },
      {
        id: 2,
        name: '选项2'
      },
      {
        id: 3,
        name: '选项3'
      }
    ],
    selectedList: [] // 用于存放用户选择的结果
  },

  selectedList: function (event) {
    this.setData({
      selectedList: event.detail.value
    });
  }
})

3.显示用户选择的结果

最后需要用一个标签来显示用户选择的结果,可以通过引用 data 中定义的 selectedList,来动态显示用户选择的结果,同时为了便于用户知道已经选择的选项,在页面中添加一个按钮,用户点击该按钮时,会使用 wx.showToast 方法弹出已选择的选项。

<view wx:if="{{selectedList.length > 0}}">
  已选择{{selectedList.length}}项:
  <block wx:for="{{selectedList}}" wx:key="index">
    <view>{{item}} </view>
  </block>
  <button type="primary" bindtap="onSubmit">确认</button>
</view>
Page({
  data: {
    list: [{
        id: 1,
        name: '选项1'
      },
      {
        id: 2,
        name: '选项2'
      },
      {
        id: 3,
        name: '选项3'
      }
    ],
    selectedList: [] // 用于存放用户选择的结果
  },

  selectedList: function (event) {
    this.setData({
      selectedList: event.detail.value
    });
  },

  onSubmit: function () {
    wx.showToast({
      title: `已选择:${this.data.selectedList}`,
      icon: 'none',
      duration: 2000
    })
  }
})

示例说明:

假设现在需要实现一个电影评分的小应用,用户可以选择想看的电影,并为其评分,最后点击提交按钮将评分结果保存到服务器上。

首先在 wxml 中定义 checkbox 组件来实现电影的选择,同时为每个电影添加评分项,如下所示:

<checkbox-group bindchange="selectedMovies">
  <block wx:for="{{movies}}" wx:key="id">
    <view class="movie-item">
      <view class="movie-title">{{item.title}}</view>
      <view class="movie-image">
        <image src="{{item.image}}" mode="aspectFill"></image>
      </view>
      <view class="movie-score">
        <text>评分:</text>
        <input type="number" min="0" max="10" bindinput="updateScore" data-id="{{item.id}}" value="{{item.score}}"/>
      </view>
      <checkbox class="movie-checkbox" value="{{item.id}}" name="movies">{{item.title}} </checkbox>
    </view>
  </block>
</checkbox-group>

然后在对应的 js 文件中编写 selectedMovies 事件处理函数,用于保存用户选择的电影:

const app = getApp()

Page({
  data: {
    movies: [
      { "id": 1, "title": "福尔摩斯小姐", "image": "https://img3.doubanio.com/view/photo/m/public/p2360160649.jpg", "score": "8.0" },
      { "id": 2, "title": "无人知晓", "image": "https://img9.doubanio.com/view/photo/m/public/p2519746028.jpg", "score": "7.2" },
      { "id": 3, "title": "红辣椒", "image": "https://img3.doubanio.com/view/photo/m/public/p1181228593.jpg", "score": "6.8" }
    ],
    selectedMovies: []
  },

  selectedMovies: function (event) {
    this.setData({
      selectedMovies: event.detail.value
    });
  },

  updateScore: function (event) {
    let index = event.currentTarget.dataset.id
    let score = event.detail.value
    let key = `movies[${index - 1}].score`
    this.setData({
      [key]: score
    })
  },

  onSubmit: function () {
    wx.showLoading({
      title: '正在提交中...',
    })

    // 此处可以通过 ajax 将数据提交到服务器上进行保存。
    // 由于没有实际的服务器,这里就不再写出真正的 ajax 请求了。
    // just mock here
    setTimeout(() => {
      wx.hideLoading()
      wx.showToast({
        title: `已选择:${this.data.selectedMovies}`,
        icon: 'none',
        duration: 2000
      })
    }, 2000);
  }
})

最后,需要添加一个提交按钮,用于提交用户选择的结果,同时,在页面中添加 wx.showToast 方法。当用户点击提交按钮时,会弹出已选择的电影信息和评分信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序实现多选功能 - Python技术站

(2)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • Java Apache POI报错“IllegalArgumentException”的原因与解决办法

    “IllegalArgumentException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 参数错误:如果参数不正确,则可能会出现此异常。例如,可能会尝试使用错误的参数创建Excel单元格。 以下是两个实例: 例1 如果参数不正确,则可以尝试使用正确的参数以解决此问题。例如,在Java中,可以使用以下代码: Workboo…

    Java 2023年5月5日
    00
  • SpringMVC中拦截器的实现

    以下是关于“SpringMVC中拦截器的实现”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用Java Web开发框架,其核心思想是基于MVC模式来实现Web应用程序开发。而拦截器是SpringMVC框架的一个重要组件,可以在请求到达Controller之前或之后进行一些处理。本攻略将详细讲解SpringMVC中拦截器的实现方法。 2…

    Java 2023年5月16日
    00
  • Java 下数据业务逻辑开发技术 JOOQ 和 SPL

    Java 下数据业务逻辑开发技术 JOOQ 和 SPL 的完整攻略 JOOQ(Java Object Oriented Querying)是一个 Java 版本的关系型数据库操作工具,它可以让用户使用 Java 对象和方法进行 SQL 查询和更新操作,JOOQ 可以解决 SQL 代码繁琐、难以维护、不能重用等问题。而 SPL(Stored Procedure…

    Java 2023年5月19日
    00
  • 快速入门介绍Java中强大的String.format()

    让我为你详细讲解一下如何快速入门介绍Java中强大的String.format()。 什么是String.format()? String.format()是Java中一个非常强大的方法,它可以让我们将一种字符串格式转换为另一种格式。它使用的格式化字符串语法类似于C语言中的printf()函数。 String.format()方法的语法 String.for…

    Java 2023年5月26日
    00
  • SpringBoot项目实战之加载和读取资源文件

    下面我将详细讲解“SpringBoot项目实战之加载和读取资源文件”的完整攻略。 加载资源文件 加载classpath中的资源文件 在SpringBoot项目中,我们可以使用ClassLoader来读取classpath中的资源文件,例如: InputStream inputStream = this.getClass().getClassLoader().…

    Java 2023年6月2日
    00
  • javaMybatis映射属性,高级映射详解

    Java Mybatis 映射属性,高级映射详解 概述 在 Java Mybatis 中, 映射属性是指将 Java 对象映射到数据库表的字段上。Mybatis 提供了多种映射方式,这篇攻略主要介绍 Mybatis 映射属性的基本用法和高级映射。 基本映射 在 Mybatis 的 mapper 文件中,我们可以使用 resultMap 标签来对返回对象进行映…

    Java 2023年6月1日
    00
  • 详解Springboot 优雅停止服务的几种方法

    Spring Boot应用程序的优雅停止是指在停止应用程序时,能够保证正在处理的请求能够完成,同时不再接受新的请求。本文将详细讲解Spring Boot应用程序的优雅停止方法,包括使用Actuator、使用Shutdown Endpoint、使用Spring Application和使用Spring Boot Admin等。 使用Actuator Sprin…

    Java 2023年5月15日
    00
  • Java中的Object类详细介绍

    Java中的Object类详细介绍 简介 在Java中,所有类都是Object类的直接或者间接子类。Object类是Java中的根类,它位于java.lang包中,几乎每个Java程序都会使用到Object类中的方法。Object类提供了通用的方法,这些方法可以被所有继承了Object类的类使用。 下面我们来详细了解一下Java中Object类的一些方法以及…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部