vue项目input标签checkbox,change和click绑定事件的区别说明

目录
  • input标签checkbox,change和click绑定事件的区别
  • input标签中checkbox类型的相关操作总结
    • 一、checked属性
    • 二、操作
    • 三、关于checkbox的其他操作

input标签checkbox,change和click绑定事件的区别

我们经常在vue开发项目的过程中,遇到需要对input框使用v-modal的这种情况,在有的时候,不光需要双向数据绑定,还需要在改变数据之后绑定其它的操作,那么问题来了,你是使用@change绑定事件还是使用@click绑定事件

建议不要通过click绑定事件,对待input标签,最好通过change来触发,本人血的教训。

<input @change="inputchecked" class="goods-checked" 
v-model="shopcargoods[index].checked" type="checkbox" >

click执行的时间要早于change执行的时间,因为v-modal的时间是一个异步的。

当点击之后,v-modal可能还没有来得及将绑定在data里面的数据改变,click绑定的事件就执行了,这会导致click绑定事件里面拿到的data数据不是最新的。

change绑定的事件是一定要等到input框的value值改变之后才会被触发。

关于这一系列的顺序我是这样理解

点击input框–> click事件生效 --> v-modal改变绑定的data数据 --> 渲染到页面上改变input的value值 --> change事件生效

input标签中checkbox类型的相关操作总结

今天突然用到了input标签里的checkbox,发现还是有些概念不清不楚的,在这里总结一下。

一、checked属性

常用于input标签里type类型为checkboxradio ,是一个Boolean属性。规定在页面加载时预先被选定。可以通过js代码进行设置。

	<input type="checkbox" name="hu" checked="checked">
	<input type="checkbox" name="hu" checked=true>
	<input type="checkbox" name="hu" checked=false>
	<input type="checkbox" name="hu" checked="">
	<input type="checkbox" name="hu" checked>

以上的几种写法,都会得到相同的结果,就是标签被选中。  

这是因为在复选框里只要有checked属性,不管是够为其赋值,结果为空或true或false或任意值,均为选中状态。

需要注意的是,在XHTML中禁止属性最小化,所以必须定义为

<input type="checkbox"  checked="checked">

二、操作

可以利用JS或Jquery操作checked的值:

var js_box1 = document.getElementById("box1").checked = true;
$("#box2").prop('checked',true);           // 标准写法 推荐
$("#box2").prop({checked: true});          // map键值对
$("#box2").prop('checked',function(){      // 通用写法
    return true;
});
$("#cb1").prop("checked","checked");        //不标准

$("#box2").attr('checked',true);           // 不推荐
$("#box2").attr('checked','true');         // 不推荐
$("#box2").attr('checked','checked');      // 通用写法

console.log('1:'+ box1.checked); // 1:undefind

在我使用的过程来看,强烈推荐使用.prop()方法进行设置或判断是否选中的操作。(当然这是jQuery里的方法)

因为在我开始想到的是用attr()方法,然后踩坑里了.......用attr()设置复选框选中没有问题,问题出现在判断是否选中复选框。不管我选中还是没有选中,返回的都是“undefind”。之后还用prop()就美滋滋。

console.log('1:'+ box1.checked);  //1:true
console.log('2:'+ $("#box2").attr('checked'));  //2:checked

$(document).on('click', '#box3', function(){
    console.log('3:'+ $("#box3").attr('checked'));  //3:undefined
});

$(document).on('click', '#box4', function(){
    console.log('4:'+ $("#box4").prop('checked'));  //4:checked
});

后来自己又研究了一下,发现如果不需要实时的监听是否选中复选框的话,attr()和prop()都能得到结果,且attr返回:"checked"或"undefined",prop 返回true/false。因为在我所使用的项目中,需要用户点击复选框选中以后,标签栏就需要立刻做出反应,将对应的内容生成新标签回显给用户。这时候使用attr('checked')在点击事件下获得checked属性,就会一直返回undefind。具体原因在后面会有解释,换成prop方法就不会出现这个问题。

还有一种方式也可以,就是   .is(':checked')  // 返回true/false

补充一下,关于prop和attr方法的区别:

1.设置的属性值类型不同

由于attr()函数操作的是文档节点的属性,因此设置的属性值只能是字符串类型如果不是字符串类型,也会调用其toString()方法,将其转为字符串类型。

prop()函数操作的是JS对象的属性,因此设置的属性值可以为包括数组和对象在内的任意类型。

2.jQuery认为:attribute的checked、selected、disabled就是表示该属性初始状态的值,property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。

即:

  • attr() 获取的是初始状态的值,即使取消了选中,也不会改变。
  • prop() 获取的值已经发生变化,是实时状态的值。(这就是我上面出问题的原因啦)

三、关于checkbox的其他操作

1、设置第一个checkbox 为选中值

$("#chk1").find('input:checkbox:first').prop("checked",true);
$("#chk1").find('input:checkbox').eq(0).prop("checked",true);

2、设置最后一个checkbox为选中值

$("#chk1").find('input:checkbox:last').prop("checked",true);

3、根据索引值设置任意一个checkbox为选中值

$("#chk1").find('input:checkbox').eq(索引值).prop('checked', true);  //索引值=0,1,2.... 
//或者
$("#chk1").find('input:checkbox').slice(0,2).prop('checked', true); //同时选中第0个和第1个checkbox
//从索引0开始(包含),到索引2(不包含)的checkbox

4、根据value值设置checkbox为选中值

$("#chk1").find("input:checkbox[value='1']").prop('checked',true);
$("#chk1").find("input[type='checkbox'][value='1']").prop('checked',true);

5、删除checkbox:①删除value=1的checkbox ②删除第几个checkbox

$("#chk1").find("input:checkbox[value='1']").remove(); //将匹配元素从DOM中删除,将标签从页面上删除了
$("#chk1").find("input:checkbox").eq(index).remove(); //索引值 index=0,1,2....
 
//如删除第3个checkbox:
 
$("#chk1").find("input:checkbox").eq(2).remove();

6、选中所有奇数项或偶数项

$("#chk1").find("input[type='checkbox']:even").prop("checked",true); //选中所有偶数 
$("#chk1").find("input[type='checkbox']:odd").prop("checked",true); //选中所有奇数 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)

    Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动复杂的单页应用.他是基于AnjularJs 编写的,所以和前者的语法特别相似,却又使用简洁了很多. 那今天,我就给大家详细的说道说道这个 Vue.js ,以下是我们这次详解的目录,朋友们可以根据自己的情况选择性阅读,所有操作均附有代码实现. 1. Vue.js 如何绑定到页面中,使用他的功能. 2.

  • checkbox在vue中的用法小结

    前言 关于checkbox多选框是再常见不过的了,几乎很多地方都会用到,这两天在使用vue框架时需要用到checkbox多选功能,实在着实让我头疼,vue和原生checkbox用法不太一样,之前对于vue中用到过的checkbox也只是别人写好的组件,这次在自己实现时走了很多坑,特意写这篇文章记录下来,给后来者提供一个参考 在这之前,先看看原生checkbox搭配jquery取值的用法 <input type="checkbox" name="hobby" v

  • vue.js数据绑定操作详解

    本文实例讲述了vue.js数据绑定操作.分享给大家供大家参考,具体如下: 数据绑定 响应式的数据绑定系统.建立绑定之后,DOM将和数据保持同步,无须手动维护DOM.使代码能够更加简洁易懂.提升效率. 数据绑定语法 1.文本插值 {{ }}Mustache标签 <span>Hello {{ name }}</span> data:{ name: 'vue' } == > Hello vue 单次插值 首次赋值后再更改vm实例属性值不会引起DOM的变化 <span v-on

  • Vue 的双向绑定原理与用法揭秘

    本文实例讲述了Vue 的双向绑定原理与用法.分享给大家供大家参考,具体如下: Vue 中需要输入什么内容的时候,自然会想到使用 <input v-model="xxx" /> 的方式来实现双向绑定.下面是一个最简单的示例 <div id="app"> <h2>What's your name:</h2> <input v-model="name" /> <div>Hello

  • vue项目input标签checkbox,change和click绑定事件的区别说明

    目录 input标签checkbox,change和click绑定事件的区别 input标签中checkbox类型的相关操作总结 一.checked属性 二.操作 三.关于checkbox的其他操作 input标签checkbox,change和click绑定事件的区别 我们经常在vue开发项目的过程中,遇到需要对input框使用v-modal的这种情况,在有的时候,不光需要双向数据绑定,还需要在改变数据之后绑定其它的操作,那么问题来了,你是使用@change绑定事件还是使用@click绑定事件

  • vue 清空input标签 中file的值操作

    template中: <input type="file" ref="pathClear" @change="onUpload" name="file" id="file"> methods中: onUpload(){ this.$refs. pathClear.value ='' }, 补充知识:将input file的选择的文件清空的两种解决方案 上传文件时,选择了文件后想清空文件路径,搜索

  • 解决vue项目input输入框双向绑定数据不实时生效问题

    我就废话不多说了,大家还是直接看代码吧~ <input type="text" maxlength="11" placeholder="请输入联系人电话" v-model="form.phone" /> 这样的输入框,绑定的是data中的form对象上的phone字段. 在mounted钩子函数里边写: this.form.phone = '1888888888'; 这样在页面上时候不会随着输入框值改变而改变. 解

  • Vue项目中CSS Modules和Scoped CSS的介绍与区别

    目录 背景 CSS Modules 原理 规则 :global选择器 Vue3新特性 Scoped CSS 原理 规则 深度作用选择器 Vue3新特性 二者的比较 总结 背景 在前端工程化飞速发展的时候,作为非编程语言的CSS在融入模块化的浪潮时产生了很多问题: 无法做到样式模块化 组件化开发是前端模块化的核心,但是原生CSS的思想是样式的层叠,对于组件来说并不友好,会造成组件样式被覆盖等问题. 于是我们希望样式是存在作用域的,即在组件的作用域内,组件样式只对该组件生效. 命名混乱 在大型项目中

  • vue中@click绑定事件点击不生效的解决

    目录 @click绑定事件点击不生效 原因 解决方法 @click中不能使用三则表达式原因 @click绑定事件点击不生效 原因 根据Vue2.0官方文档关于父子组件通讯的原则,父组件通过prop传递数据给子组件,子组件触发事件给父组件.但父组件想在子组件上监听自己的click的话,需要加上native修饰符. 解决方法 方法1:在@click后加上.native(监听根元素的原生事件,使用 .native 修饰符) @click.native = "..." 方法2:向外发送clic

  • jQuery动态添加li标签并添加属性和绑定事件方法

    代码如下: <%@page import="java.util.ArrayList"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q

  • vue实现在v-html的html字符串中绑定事件

    需求: 需要在v-html的html字符串的button中绑定点击事件,需要点击后做一些操作,必须渲染成html,但是渲染后的html里面写绑定事件的代码没有经过vue编译,所以事件无效. <div class="code-review"> <div v-html="html" v-highlight @click="addComment($event)"></div> </div> compute

  • 解决vue项目中type=”file“ change事件只执行一次的问题

    问题描述 在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件 <template> <div class="hello"> <input type="button" value="上传文件" name="" id="" @click="updata"> <input type=&quo

  • a标签的href和onclick 的事件的区别介绍

    1.onclick事件先执行,如果onclick事件返回一个false值则href不再执行. 2.href="#"默认页面到锚点#top所以页面有滚动条时会跳到最上面.最好的解决办法是href="javascript:void(0);". 3.href中的返回内容会冲掉当前页面的信息.

  • vue获取input值的三种常用写法

    目录 1. v-model 表单输入绑定 2. @input 监听输入框 3. ref 获取数据 vue收集input[type=“checkbox”]的值 input[type=“checkbox”],勾选or不勾选 input[type=“checkbox”]多个时,哪些被选中 1. v-model 表单输入绑定 使用v-model创建双向数据绑定, 用来监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理.     <template>         <div>

随机推荐