uniapp中u-input点击事件失效

当给u-input设置了disabled/readonly属性后,pc浏览器中点击事件失效,但是app/移动端h5中却仍有效

解决办法

给外边包上一个盒子设置点击事件,给input加上css属性:pointer-events:none

pointer-events CSS 属性指定在什么情况下 (如果有) 某个特定的图形元素可以成为鼠标事件的 target (en-US)。

除了指示该元素不是鼠标事件的目标之外,值none表示鼠标事件“穿透”该元素并且指定该元素“下面”的任何东西。

demo1

<view @click='handleClick'>
    <u--input
    style="pointer-events:none"
    :disabled="true"
    placeholder="请输入"/>
</view>

demo2

<template>
  <view>
    <view class="formBody">
      <u-form
        class="apply-form-field"
        :model="form"
        ref="form"
        :rules="rules"
        :errorType="errorType"
      >
        <u-form-item
          required
          label-width="150"
          label="养护站"
          right-icon="arrow-right"
          prop="maintenanceStationName"
        >
          <u-col @click="maintenanceStationIdShow = true">
            <u-input
              style="pointer-events: none"
              placeholder="选择养护站"
              v-model="form.maintenanceStationName"
              @click="maintenanceStationIdShow = true"
              disabled
            />
          </u-col>
          <u-picker
            range-key="siteName"
            v-model="maintenanceStationIdShow"
            :range="maintenanceStationList"
            mode="selector"
            @confirm="maintenanceStationIdConfirm"
          >
          </u-picker>
        </u-form-item>
​
        <u-form-item
          label-width="150"
          label="处置人员"
          right-icon="arrow-right"
          prop="disposePeopleName"
        >
          <u-col @click="disposePeopleNameShow = true">
            <u-input
              style="pointer-events: none"
              placeholder="选择处置人员"
              v-model="form.disposePeopleName"
              @click="disposePeopleNameShow = true"
              disabled
            />
          </u-col>
          <u-picker
            range-key="nickName"
            v-model="disposePeopleNameShow"
            :range="disposePeopleNameList"
            mode="selector"
            @confirm="applicantUserNameConfirm"
          ></u-picker>
        </u-form-item>
​
        <u-form-item
          label-width="150"
          label="联系方式"
          right-icon="none"
          prop="phone"
        >
          <u-input
            @focus="toTop"
            @blur="toBeJust"
            v-model="form.phone"
            disabled
          />
        </u-form-item>
​
        <u-form-item
          label-width="150"
          prop="diseaseLevel"
          label="优先级"
          right-icon="arrow-right"
        >
          <u-col @click="diseaseLevelShow = true">
            <u-input
              style="pointer-events: none"
              placeholder="选择优先级"
              :value="
                $getLabel(
                  diseaseLevelList,
                  'diseaseLevel',
                  form,
                  'dictValue',
                  'dictLabel'
                )
              "
              @click="diseaseLevelShow = true"
              disabled
            />
          </u-col>
          <u-picker
            range-key="dictLabel"
            v-model="diseaseLevelShow"
            :range="diseaseLevelList"
            mode="selector"
            @confirm="diseaseLevelConfirm"
          >
          </u-picker>
        </u-form-item>
​
        <u-form-item
          label-width="150"
          prop="deadline"
          label="截止时间"
          right-icon="none"
        >
          <u-col @click="timeShow = true">
            <u-input
              style="pointer-events: none"
              rightIcon="clock"
              placeholder="选择巡检时间"
              v-model="form.deadline"
              @click="timeShow = true"
              disabled
            />
          </u-col>
          <u-picker
            :params="params"
            v-model="timeShow"
            mode="time"
            @confirm="timeConfirm"
          >
          </u-picker>
        </u-form-item>
​
        <u-form-item
          label-position="top"
          label-width="150"
          label="处置内容"
          right-icon="none"
          prop="disposeContent"
        >
          <u-input
            @focus="toTop"
            @blur="toBeJust"
            v-model="form.disposeContent"
            type="textarea"
            placeholder="请输入处置内容"
          />
        </u-form-item>
      </u-form>
    </view>
​
    <view class="bottomBox">
      <view class="bottomBox-icon"> </view>
      <view class="bottomBox-box">
        <view class="none" @click="back">取消</view>
        <view class="sure" @click="submitForm">确定</view>
      </view>
    </view>
  </view>
</template>
​
<script>
import { isOpenMode } from "@/common/normal";
import diseaseDisposal from "../../../../common/api/system/workbench/diseaseDisposal";
​
export default {
  data() {
    return {
      disposePeopleNameShow: false,
      diseaseLevelShow: false,
      timeShow: false,
      maintenanceStationIdShow: false,
      rules: {
        maintenanceStationName: [
          {
            required: true,
            message: "请选择养护站",
            trigger: ["blur"],
          },
        ],
      },
      errorType: ["message", "border"],
      form: {},
      params: {
        year: true,
        month: true,
        day: true,
        hour: true,
        minute: true,
        second: true,
      },
      maintenanceStationList: [],
      disposePeopleNameList: [],
      diseaseLevelList: [],
    };
  },
  methods: {
    toTop() {
      let num = isOpenMode();
      if (num === 3 || num === 2) {
        return;
      } else {
        const bottomBox = document.querySelector(".bottomBox");
        bottomBox.style.bottom = -100 + "px";
​
        const formBody = document.querySelector(".formBody");
        formBody.style.height =
          "calc(100vh - var(--window-top) - var(--window-bottom))";
      }
    },
​
    toBeJust() {
      const bottomBox = document.querySelector(".bottomBox");
      bottomBox.style.bottom = 0;
​
      const formBody = document.querySelector(".formBody");
      formBody.style.height =
        "calc(100vh - var(--window-top) - var(--window-bottom) - 96px)";
    },
​
    getApplicantUserNameList() {
      this.$u.api.diseaseReporting.getUser().then((res) => {
        this.disposePeopleNameList = res.data;
      });
    },
​
    getMaintenanceStationList() {
      this.$u.api.diseaseDisposal.maintenanceStationList().then((res) => {
        if (res.code === 1) this.maintenanceStationList = res.data;
      });
    },
​
    getUpstreamDownstreamList() {
      var params = {
        dictType: "direct_manage_task_priority",
      };
      this.$u.api.normal.getDict(params).then((res) => {
        this.diseaseLevelList = res.data;
      });
    },
​
    applicantUserNameConfirm(e) {
      this.form.disposePeopleId = this.disposePeopleNameList[e].userId;
      this.form.disposePeopleName = this.disposePeopleNameList[e].nickName;
      this.form.phone = this.disposePeopleNameList[e].phone;
    },
​
    maintenanceStationIdConfirm(e) {
      this.form.maintenanceStationName =
        this.maintenanceStationList[e].siteName;
      this.form.maintenanceStationId = this.maintenanceStationList[e].id;
    },
​
    timeConfirm(e) {
      this.form.deadline = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`;
    },
​
    diseaseLevelConfirm(e) {
      this.form.diseaseLevel = this.diseaseLevelList[e].dictValue;
    },
​
    back() {
      uni.navigateBack({
        delta: 1,
      });
    },
​
    submitForm() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          console.log(this.form);
          this.$u.api.diseaseDisposal
            .saveDiseaseDisposal(this.form)
            .then((res) => {
              if (res.code === 1) {
                this.$u.toast("处置成功");
                setTimeout(() => {
                  this.back();
                }, 1000);
              }
            });
        } else {
          return false;
        }
      });
    },
  },
  onLoad(option) {
    this.form.diseaseClaimId = option.id;
  },
  onShow() {
    this.form.disposePeopleId = this.vuex_user.sysUser.userId;
    this.form.disposePeopleName = this.vuex_user.sysUser.nickName;
    this.form.phone = this.vuex_user.sysUser.phone;
​
    this.getApplicantUserNameList();
    this.getUpstreamDownstreamList();
    this.getMaintenanceStationList();
  },
  mounted() {
    this.$refs.form.setRules(this.rules);
    let windowHeight = 0;
    uni.getSystemInfo({
      success: (res) => {
        windowHeight = res.windowHeight;
      },
    });
​
    const windowResizeCallback = (res) => {
      if (res.size.windowHeight < windowHeight) {
        this.toTop();
      } else {
        this.toBeJust();
      }
    };
    uni.onWindowResize(windowResizeCallback);
  },
};
</script>
​
<style lang="scss" scoped>
page {
  height: 100%;
  background-color: #f5f5f5;
}
​
::v-deep .u-form-item {
  padding: 16px 32rpx !important;
  font-size: 17px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: #1f1f1f;
  font-size: 32rpx !important;
}
​
.line {
  height: 12px;
  width: 100%;
  background-color: #f5f5f5;
}
​
.tips {
  padding: 0px 32rpx 0 32rpx;
  margin-top: 4px;
  font-size: 14px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  color: rgba(31, 31, 31, 0.4);
}
​
.bottomBox {
  width: 100%;
  position: absolute;
  bottom: 0px;
  height: 96px;
  z-index: 999;
  background: #ffffff;
  box-shadow: inset 0px 1px 0px 0px rgba(25, 31, 37, 0.12);
  /*border: 2px solid red;*/
  display: flex;
  justify-content: space-between;
​
  &-icon {
    width: 55%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10rpx 60rpx 0;
​
    &-iconBox {
      display: flex;
      flex-direction: column;
      align-items: center;
      font-size: 28rpx;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
      color: #1f1f1f;
      height: 44px;
​
      .u-icon {
        font-size: 40rpx;
        margin-bottom: 12rpx;
      }
    }
  }
​
  &-box {
    margin-top: 8px;
    display: flex;
    align-items: center;
    padding: 0 32rpx;
    flex: 1;
​
    view {
      width: 50%;
      height: 44px;
      border-radius: 4px;
      border: 1px solid rgba(31, 31, 31, 0.1);
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 34rpx;
      font-family: PingFangSC-Regular, PingFang SC;
      font-weight: 400;
    }
​
    .none {
      color: #1f1f1f;
      margin-right: 16rpx;
    }
​
    .none:active {
      background: rgba(31, 31, 31, 0.17);
    }
​
    .sure {
      background: #3296fa;
      color: #ffffff;
    }
​
    .sure:active {
      background: rgba(32, 116, 212, 1);
    }
  }
}
​
.formBody {
  position: absolute;
  height: calc(100vh - var(--window-top) - var(--window-bottom) - 96px);
  overflow-y: auto;
  width: 100%;
}
</style>
​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/703741.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web端在线Stomp服务测试与WebSocket服务测试

Stomp服务测试 支持连接、发送、订阅、接收&#xff0c;可设置请求头、自动重连 低配置云服务器&#xff0c;首次加载速度较慢&#xff0c;请耐心等候 预览页面&#xff1a;http://www.daelui.com/#/tigerlair/saas/preview/lxbho9lkzvgc 演练页面&#xff1a;http://www.da…

【外汇天眼】交易智慧:遵循趋势,稳中求胜

在交易中&#xff0c;新手往往因对未来走势的不确定性感到恐惧&#xff0c;从而不断要求对市场进行全面分析。这种需求反映了他们在投机心理幼稚期缺乏安全感的表现。有些勤奋的交易者甚至在做单前、持仓时和寻找出局理由时都在不断分析行情。然而&#xff0c;这种过度分析真的…

Android本地Gradle Plugin的创建以及使用

有些Gradle插件&#xff0c;不想放到云端&#xff0c;本来也只是小功能而已&#xff0c;还放到云端&#xff0c;每次修改和发布都很麻烦&#xff0c;这种需求的插件放到本地还是合适的。 1.直接放到build.gradle 2.新建一个module 取名叫buildSrc(注意&#xff0c;一定要叫这个…

【StableDiffusion】Lora 底层原理,低秩适配,Lora 如何与 checkpoint 联合发挥作用

鸣谢UP主&#xff1a;是花子呀 本篇博客参考视频&#xff1a;https://www.bilibili.com/video/BV17i421X7q7/?spm_id_from333.880.my_history.page.click&vd_source38d6ea3466db371e6c07c24eed03219b Lora 是个啥&#xff1f;Lora 的 缩写 Lora&#xff1a;Low Rank Ada…

数据库课设-中小企业工资管理系统

一、效果展示 二、后端代码 import string import random from flask import Flask, render_template, request, jsonify, redirect, session import pymysql from flask_cors import CORS import time import schedule from datetime import datetime import threading from …

国内服务器安装 Docker 服务和拉取 dockerhub 镜像

前提: 有一台海外的VPS,目的是安装dockerhub镜像.适用debian系统 1: 安装 docker-ce (国内服务器) sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/…

bfs+枚举,CF666B - World Tour

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 666B - Codeforces 二、解题报告 1、思路分析 数据量允许跑N次bfs预处理所有点的最短路&#xff0c;以及预处理到达每个点距离最远的3个点&#xff0c;以及每个点能够到达的最远的3个点 我们枚举…

第 6 章: Spring 中的 JDBC

JDBC 的全称是 Java Database Connectivity&#xff0c;是一套面向关系型数据库的规范。虽然数据库各有不同&#xff0c;但这些数据库都提供了基于 JDBC 规范实现的 JDBC 驱动。开发者只需要面向 JDBC 接口编程&#xff0c;就能在很大程度上规避数据库差异带来的问题。Java 应用…

康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(一)

功能模型接口FMI&#xff08;Functional Mock-up Interface&#xff09;是一个开放且与工具解耦的标准。FMI包含了一个C-API&#xff08;接口&#xff09;&#xff0c;一个用于描述接口的XML文件以及可交换的功能模型单元FMU&#xff08;Functional Mock-up Unit&#xff09;&a…

解读surging 的内存过高的原因

前言 对于.NET开发人员来讲&#xff0c;一个程序占用内存过高&#xff0c;是极其糟糕&#xff0c;是一款不合格的程序软件&#xff0c;.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站垃圾收集器&#xff0c;而是对于一款低内存的程序更能给…

CP AUTOSAR标准中文文档链接索引

AUTOSAR标准的核心组件包括通信、诊断、安全等&#xff0c;这些组件通过模块化结构进行组织。系统被划分为多个模块&#xff0c;每个模块负责特定的功能。模块之间通过接口进行通信&#xff0c;接口定义了模块之间的交互规则。AUTOSAR标准支持模块的配置&#xff0c;可以根据不…

debug调试_以Pycharm为例

文章目录 作用步骤打断点调试调试窗口 作用 主要是检查逻辑错误&#xff0c;而非语法错误。 步骤 打断点 在需要调试的代码行前打断点&#xff0c;执行后会停顿在断点位置&#xff08;不运行&#xff09; 调试 右键“debug”&#xff0c;或者直接点击右上角的小虫子 调试…

8.11 矢量图层线要素单一符号使用七(爆炸线)

文章目录 前言爆炸线&#xff08;Lineburst&#xff09;QGis设置线符号为爆炸线&#xff08;Lineburst&#xff09;二次开发代码实现爆炸线&#xff08;Lineburst&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中爆炸线&#xff08;Lineburst&#xff09;的使用说明&…

kotlin之foreach跳出循环

1.创建函数跳出循环。 fun breakTest() {(0..10).forEachIndexed { index, i ->Log.d("test start index$index,i$i")if (index > 7) {return}Log.d("test end index$index,i$i")}}2.通过run语句&#xff0c;将会在if判断语句为true的时候跳出run代…

大模型:分本分割模型

目录 一、文本分割 二、BERT文本分割模型 三、部署模型 3.1 下载模型 3.2 安装依赖 3.3 部署模型 3.4 运行服务 四、测试模型 一、文本分割 文本分割是自然语言处理中的一项基础任务&#xff0c;目标是将连续的文本切分成有意义的片段&#xff0c;这些片段可以是句子、…

SprringCloud Gateway动态添加路由不重启

前言&#xff1a; 在微服务项目中&#xff0c;SpringCloud Gateway扮演着极为重要的角色&#xff0c;主要提供了路由、负载均衡、认证鉴权等功能。本文主要讲解如何实现网关的自定义动态路由配置&#xff0c;无需重启网关模块即可生效。 一、动态路由必要性 在微服务架构中&…

ATFX汇市:美联储利率决议来袭,按兵不动概率较高

ATFX汇市&#xff1a;本周四凌晨2:00&#xff0c;美联储将公布6月份利率决议结果&#xff0c;市场普遍预期其将维持5.5%的基准利率上限不变&#xff0c;预期落地的话&#xff0c;美元指数将受利多提振。考虑到上周加拿大央行和欧央行相继降息25基点&#xff0c;美联储出现跟随性…

前方碰撞缓解系统技术规范(简化版)

前方碰撞缓解系统技术规范(简化版) 1 系统概述2 工作时序3 预警目标4 功能条件5 HMI开关6 显示需求7 相关子功能8 TTC标定参考9 指标需求1 系统概述 前方碰撞缓解系统包含LW潜在危险报警、FCW前方碰撞预警和AEB自动紧急制动三个部分。 LW潜在危险报警:根据本车与前车保持的…

MyBatis进行模糊查询时SQL语句拼接引起的异常问题

项目场景&#xff1a; CRM项目&#xff0c;本文遇到的问题是在实现根据页面表单中输入条件&#xff0c;在数据库中分页模糊查询数据&#xff0c;并在页面分页显示的功能时&#xff0c;出现的“诡异”bug。 开发环境如下&#xff1a; 操作系统&#xff1a;Windows11 Java&#…

DIYGW可视化开发工具:微信小程序与多端应用开发的利器

一、引言 随着移动互联网的飞速发展&#xff0c;微信小程序以其轻便、易用和跨平台的特点受到了广泛关注。然而&#xff0c;微信小程序的开发相较于传统的H5网页开发&#xff0c;在UI搭建和交互设计上存在一定的挑战。为了应对这些挑战&#xff0c;开发者们一直在寻找更加高效…