6.用on繫結事件
js程式碼初步模架已經出來了,接下就要開始寫具體的功能。功能又從哪裡開始寫呢?也許哪裡開始都可以。 最終我們發現,介面上只有兩個按鈕,要麼加,要麼減,那麼我們就加和減開始。
點選加號,點選減號,我們得讓他先觸發事件;init是初始化的,那麼在初始化的時候,我希望他同時也繫結事件。
//初始化
Quantity.prototype.init = function (opt) {
opt = opt || {};
this.addBtn = opt.addBtn;
this.cutBtn = opt.cutBtn;
this.numBox = opt.numBox;
this.msgBox = opt.msgBox;
this.evt();
};
//負責繫結事件
Quantity.prototype.evt = function (opt) {
};
由於考慮到繫結事件,可能比較複雜,我將他獨立出一個函式。 那麼就接下去寫吧。
//負責繫結事件
Quantity.prototype.evt = function() {
console.log(this.addBtn); //".num-add"
this.addBtn.on('click', function() { //undefined is not a function
console.log('加');
});
this.cutBtn.on('click', function() {
console.log('減');
});
};
發現又報錯了,因為this.addBtn和this.cutBtn只是一個字串,並沒有on這個方法。要有on方法,一定是要將事件繫結在$()之後返回的物件上的,那麼接著改一下程式碼。
//負責繫結事件
Quantity.prototype.evt = function() {
$(document).on('click', this.addBtn, function() {
console.log('加');
});
$(document).on('click', this.cutBtn, function() {
console.log('減');
});
};
經過小改動之後已經實現了我想要的結果。在這裡我想分享一下on的一些用法。
1.click()可以on('click')也可以
html程式碼:
<button class="test1">點我1</button>
<button class="test2">點我2</button>
js程式碼:
$('.test1').click(function(){
alert(1);
});
$('.test2').on('click', function(){
alert(2);
});
這個例子很簡單,只是作為一個鋪墊。
檢視例子:http://jsfiddle.net/gs_jquery/d3L51gpu/1/
2.on可以動態繫結事件。
當然實際專案中,我們會先繫結事件,因為dom元素是需要根據業務邏輯再追回進去的。
html程式碼:
<div id="wrap"></div>
js程式碼:
//先繫結事件
$('#test1').click(function () {
alert(1);
});
$('#test2').on('click', function () {
alert(2);
});
$('#wrap').on('click', '#test3', function () {
alert(3);
});
//再追加dom
var wrapObj = $('#wrap');
wrapObj.append('<button id="test1">點我1- click</button>');
wrapObj.append('<button id="test2">點我2 - on("click")</button>');
wrapObj.append('<button id="test3">點我3 - on("click")</button>');
看到這個例子,我們發現只有 id="test3"個按鈕會彈出一個資訊。是的,不管是click還是用on方法,繫結的物件一定是要在js執行之前已經存的。所以當繫結在#wrap上的時候就可以了。
檢視例子:http://jsfiddle.net/gs_jquery/L7ma7af9/
3.on和off配合著用
html程式碼:
<button id="test1">點我</button>
<button id="test2">繫結</button>
<button id="test3">取消</button>
js程式碼:
//點選繫結, test1就繫結事件了
$('#test2').click(function() {
$('#test1').on('click', function() {
alert(1);
});
});
//點選繫結, test1就取消事件了
$('#test3').on('click', function() {
$('#test1').off('click');
});
例子:http://jsfiddle.net/gs_jquery/1es6n2aq/ 沒事就開啟例子點點,我們發現每on一次就繫結一次,而off一次,就把之前所有繫結的事件都解綁了。專案裡面也會常碰到重複繫結而產生的bug。
4.on和off配合名稱空間使用
html程式碼:
<button id="test1">點我</button>
<button id="bind1">繫結1</button>
<button id="bind2">繫結2</button>
<button id="off">解綁</button>
js程式碼:
$('#bind1').click(function () {
$('#test1').on('click.space1', function () {
alert(1);
});
});
$('#bind2').on('click', function () {
$('#test1').on('click.space2', function () {
alert(2);
});
});
$('#off').on('click', function () {
$('#test1').off('click.space1');
});
例子:http://jsfiddle.net/gs_jquery/yqtzv0pu/
加上了名稱空間之後,我們在解綁的時候可以對應的解綁,而不會所有的事件都解綁了。
瞭解這些基本的用法,應該可以搞定很多情況了,下面兩種用的比較少,順便也推薦一下。
5.自定義事件。
html程式碼:
<button id="click1">點我1</button>
<button id="click2">點我2</button>
js程式碼:
$(this).on('xidada', function () {
alert('xidada');
});
$(this).on('pmm', function () {
alert('pmm');
});
$('#click1').click(function () {
$(this).trigger("xidada");
});
$('#click2').click(function () {
$(this).trigger("pmm");
});
自定義事件有沒有很酷的感覺,為了保證版權,是不是想把自己的名字作為了一個事件名呢? 看例子:http://jsfiddle.net/gs_jquery/7jwco6qo/
6.資料傳遞
html程式碼:
<button id="click1">點我1</button>
<button id="click2">點我2</button>
<button id="click3">點我3</button>
js程式碼:
function func(name) {
alert(name);
}
function fund(e) {
//e.data 就是事件上傳過來的資料。
alert(e.data.name);
}
$('#click1').on('click', function() {
func('name');
});
//{}這個物件是用來傳值的。傳在e.data上面
$('#click2').on('click', {
name: 'name'
}, fund);
第一種方法是大家用的最多的,而第二種方法是將引數傳在事件(e)上面,多一種方法多一個辦法,先學著也許可以用到呢? 例子:http://jsfiddle.net/gs_jquery/vcwhvggn/
我們可以將他轉成jquery物件再綁事件。
//負責繫結事件
Quantity.prototype.evt = function() {
$(this.addBtn).on('click', function() {
console.log('加');
});
$(this.cutBtn).on('click', function() {
console.log('減');
});
};
相關文章
- 事件繫結事件
- JavaScript 事件繫結JavaScript事件
- JSX繫結事件JS事件
- js on繫結事件JS事件
- Hooks與事件繫結Hook事件
- JS-事件繫結JS事件
- Vue事件繫結原理Vue事件
- 繫結自定義事件事件
- v-on 繫結事件事件
- python tkinter如何繫結事件?Python事件
- React事件繫結的方式React事件
- React事件優雅繫結React事件
- 元件繫結原生事件元件事件
- IOS繫結touchend事件失效iOS事件
- JS學習之事件和事件繫結JS事件
- JS的事件繫結和事件流模型JS事件模型
- zepto繫結事件改變冒泡事件流事件
- jQuery事件中on實現繫結多個事件jQuery事件
- 080 元件自定義事件-繫結元件事件
- 微信小程式事件繫結微信小程式事件
- Swoole 使用on()繫結事件報錯事件
- 用js寫一個繫結事件檢測視窗大小JS事件
- Vue事件獲取觸發事件物件和繫結事件物件Vue事件物件
- JS給全域性繫結事件以及給除某個元素外的其他元素繫結事件JS事件
- echarts 繫結事件處理函式Echarts事件函式
- jQuery之_事件繫結與解綁jQuery事件
- 模板語法之--強制資料繫結和繫結事件監聽事件
- three.js事件繫結外掛--onEventJS事件
- React事件繫結幾種方法測試React事件
- 1.22 JQuery5:繫結自定義事件jQuery事件
- Vue 如何給元件繫結原生事件Vue元件事件
- 【測試平臺開發】Vue指令、屬性繫結、事件繫結學習教程Vue事件
- 前端基礎之原生js事件繫結案例前端JS事件
- jQuery原始碼剖析(五) - 事件繫結原理剖析jQuery原始碼事件
- vue系列--vue是如何實現繫結事件Vue事件
- jQuery實現DOM元素事件動態繫結jQuery事件
- React應該如何優雅的繫結事件?React事件
- 動態生成的html元素繫結click事件HTML事件
- uni-app入門教程(3)資料繫結、樣式繫結和事件處理APP事件