javaScript中的onclick与jquery中的click区别

来来来,先看一个例子:

html部分,定义几个按钮

<div class="carousel-btn">    <button class="btn"></button>    <button class="btn"></button>    <button class="btn"></button>    <button class="btn"></button>    <button class="btn"></button></div>
js部分,实现点击按钮弹出是第几个按钮:

1、原生js实现

for(var i=0;i<_btn.length;i++){  _btn[i].onclick=function () {    alert(i)  }}

这个会出现啥问题呢?——————————你会发现点击按钮都会弹出 4。因为函数体内的i与for循环内的i是同一个i,for循环执行完i为4,所以在执行点击事件的时候就会都弹出4。

那该咋解决呢?——————那就把函数体的i和for循环的i分来嘛,那怎样分开呢?那就把i赋加到按钮的一个属性上嘛

index 属性——可返回索引位置

那么:

for(var i=0;i<_btn.length;i++){  _btn[i].index = i;  _btn[i].onclick=function () {    alert(this.index)  }}这下结果就正确了吧~~~~虽然这样解决了,但想想还有其他什么简便办法吗?1、用es6中的let解决变量作用域问题:
for(let i=0;i<_btn.length;i++){  _btn[i].onclick = function () {    alert(i)  }}
2、jquery中的click方法是干啥的呢?要不用它试试呗

_btn.click (function () { alert($(this).index())})
果然好使!那么我们来看看代码是怎么实现的...........对比第二种方式,发现竟然不用循环,不用i,那个this和这个$(this)是啥区别,那个index与这个index()又是什么关系?为什么onclick要用=连接函数,而click却用()?来我们一条一条理解:1、为什么不用循环?如果你在第二条中不用循环,直接_btn.onclick()你会发现报错;原因就是,_btn是数组形式,而onclick只能针对一个dom元素进行操作;而click却能针对数组操作;2、this和$(this)区别?首先,this是html中的元素,它相当于一个指针;而$()=jquery(),$(this)是jquery中的对象,所以$(this)能调用jquery中的方法;this,表示当前的上下文对象是一个html DOM对象,可以调用html对象所拥有的属性,方法。$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。3、index与index()区别?上面也说了,index是HTML DOM的一个属性,返回索引位置;index()是jquery DOM元素中的一个方法。index()方法用于返回指定元素相对其他指定元素的index位置;
$(this)就是指当前点击的那个元素,可以调用jquery中的index()方法;而this是html的对象,可以直接使用html中的属性index;
4、onclick与click区别?

首先,两者本质区别:onclick是js原始的事件,click是jquery中新增的方法,click方法是执行会触发onclick事件,原生的js中没有click方法。

click是动作,点击事件,onclick是监听点击事件的发生并调用相应的监听处理函数。、

onclick是绑上事件,告诉浏览器在鼠标点击的时候应该做什么;

click是触发事件,模拟鼠标的点击操作;

onclick后面加函数,onclick是点击事件,后面的函数是要点击的操作(函数);onclick=funtion(){}是函数表示式的形式;

click()是方法,括号内再加一个函数的话click(function)这个函数就是回调函数,就是将一个函数作为参数传递给click方法,click就会执行或者调用所传递给它的函数;function是规定当发生click事件时运行的函数;而onclick是事件不是方法,所以不能将一个函数作为参数传递给事件,只能传递给函数;所以onclick事件与click()方法的写法不一样。

有不正确的地方欢迎批评指正~~~~~

原文地址:https://www.cnblogs.com/jennydtt/p/9829066.html

时间: 2024-08-03 23:10:19

javaScript中的onclick与jquery中的click区别的相关文章

JavaScript事件委托原理及Jquery中的事件委托

概念 事件委托,通俗来说就是将元素的事件委托给它的父级或者更外级元素处理. 事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡:事件开始由最具体的元素接收,然后逐级向上传播到较为不具体的节点(或文档). 事件捕获:事件开始由不太具体的节点接收,然后逐级向下传播到最具体的节点.它与事件冒泡是个相反的过程. DOM2级事件规定的事件流包括三个阶段: 事件捕获 目标阶段 事件冒泡 原理 事件委托就是利用事件冒泡机制实现的. 假设有一个列表,要求点击列表项弹出对应字段. <ul id="my

js中window.onload 与 jquery中$(document.ready()) 测试

js中window.onload 与 jquery中$(document.ready())区别,验证代码如下(调换js代码和Jquer代码书写顺序测试,运行结果一样,因此与代码书写位置没关系): <html> <head> <script type='text/javascript' src='jquery-1.11.1.min.js'></script> <script type='text/javascript'> $(document).r

JS中的onload与jQuery中的ready区别

jQuery的执行机制(onload与ready的区别) 结论得出前自行测试: 为了测试是否真如所说的那样,所以在页面插入了20000张照片,照片数量少得不出什么结论,所以改用console.log()来测试,这样一来我可以很好的看出在页面最底端有没有都加载出来,还有是打印出的结果的事件顺序. 所用到的JS代码是: console.time('name'); window.onload = function() { console.log('onload2'); console.timeEnd(

javascript追加html实现类似jQuery中append方法

首先是要操作的html啦 <div id="imageList"></div> 然后用原生JavaScript来向div中追加html 假设要追加的html字符串是str var str =''; document.getElementById("imageList").innerHTML+=str; 注意 1:innerHTML是对象不是函数,容易与jQuery中的html()方法混淆 2:不能把document.getElementByI

HTML5中的data-*属性和jQuery中的.data()方法使用

HTML5中的data-*属性 我们往往会根据需要在HTML标记上添加自定义的属性来存储和操作数据,我们自定义的属性名字也千奇百怪,五花八门.我们可以通过原生的getAttribute()或jQuery中的.attr()来获取我们自定义的属性.但是前端技术在向着规范化前进.HTML5标准规定,自定义的属性都已data-*开头,这样就区分开了固有属性和自定义属性.HTML代码如下: <div id="testDiv" data-cname="张三" data-e

javascript学习笔记-2:jQuery中$(&quot;xx&quot;)返回值探究

最近在写一个jQuery插件的时候,需要用到一个条件: 一组img标签,每一个元素都需要被它前面的元素值src替换,如果是第一个(序列为0)则其值为最后一个元素值,如果是最后一个,那么其值为第一个元素值,以此形成一个闭环. 为此,我使用了三元运算符?:,其表达式为:var next=$(this).next()?$(this).next():imageItems.first(); 运行测试发现如下问题,当运行到数组最后一个元素时,其next是始终不会是这一组img标签的第一个,为此对$(this

比较javascript中的appendChild()和jquery中的append() 才知道什么叫jqery真牛

1 <!doctype html> 2 <html> 3 <head> 4 <!--声明当前页面编码集(中文编码<gbk,gb2312>,国际编码<utf-8>)--> 5 <meta http-equiv="Content-Type" content="text/html";charset="utf-8"> 6 7 <title>HTML模版<

JavaScript封装Ajax(类JQuery中$.ajax()方法)

ajax.js (function(exports, document, undefined){ "use strict"; function Ajax(){ if(!(this instanceof Ajax)) return; return this; } Ajax.prototype = { init: function(opts){ opts = opts || {}; this.opts = opts; this.opts.type = opts.type || 'get';

js中window.onload与jquery中$(document.ready())的区别

$(document).ready()是在DOM结构载入完后执行的,而window.onload是得在所有文件都加载完后执行的,注意区别,一个是DOM加载完,一个是所有文件加载完 耳听为虚,眼见为实.通过下面的实例可查看两者的异同(注意:aa.jpg最好是一张大容量图片) <html> <head> <script type='text/javascript' src='jquery-1.3.2.min.js'></script> <script ty