HTML element attached to JS object(附加到JS对象的HTML元素)
本文介绍了附加到JS对象的HTML元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我只是略显OOJS,但有一件事我想不通,那就是为和HTML元素创建对象并向其中添加事件。
为了练习,我有一个想法,可以输入可以验证、编辑等.
下面是我调用输入并为其分配HTML对象的方式
var elements = document.querySelectorAll('.input-field');
for (var n = 0; n < elements.length; n++) {
var instance = new input(elements[n]);
}
并且此实际起作用,事件被分配
但是当我单击输入this.element
未定义时,我真的不知道如何操作,因为我已经构造了分配了this.element
的对象。
(function(){
'use strict';
var Input = function Input(elem) {
this.element = elem;
this.construct();
};
Input.prototype.Classes = {
INPUT: 'input-field__input',
LABEL: 'input-field__label',
EDITED: 'input-field--edited',
FOCUSED: 'input-field--focused'
};
Input.prototype.onFocus_ = function(e) {
this.element.classList.add(this.Classes.FOCUSED);
};
Input.prototype.construct = function() {
if(this.element) {
this.input = this.element.querySelector('.' + this.Classes.INPUT);
this.label = this.element.querySelector('.' + this.Classes.LABEL);
if(this.input){
this.input.addEventListener('focus', this.onFocus_);
}
}
}
var elements = document.querySelectorAll('.input-field');
for (var n = 0; n < elements.length; n++) {
var instance = new Input(elements[n]);
}
})()
<div class="input-field">
<label class="input-field__label">Name</label>
<input type="text" name="name" class="input-field__input">
</div>
<div class="input-field">
<label class="input-field__label">Last</label>
<input type="text" name="last" class="input-field__input">
</div>
问题是事件已分配,但它不知道是哪个对象,this
指向实际的HTML输入,而不是Input
对象。
如何修复此问题?
我在网上搜索了一下,但找不到类似的东西。我发现最接近的是: JS objects attached to HTML elements
另外,如果您可以以任何方式改进代码,请不要介意我仍在学习。
提前感谢您
推荐答案
使用bind
函数定义您的函数将使用的范围。当前您的作用域是元素,而不是类实例。
this.input.addEventListener('focus', this.onFocus_.bind(this));
(function(){
'use strict';
var Input = function Input(elem) {
this.element = elem;
this.construct();
};
Input.prototype.Classes = {
INPUT: 'input-field__input',
LABEL: 'input-field__label',
EDITED: 'input-field--edited',
FOCUSED: 'input-field--focused'
};
Input.prototype.onFocus_ = function(e) {
this.element.classList.add(this.Classes.FOCUSED);
};
Input.prototype.construct = function() {
if(this.element) {
this.input = this.element.querySelector('.' + this.Classes.INPUT);
this.label = this.element.querySelector('.' + this.Classes.LABEL);
if(this.input){
this.input.addEventListener('focus', this.onFocus_.bind(this));
}
}
}
var elements = document.querySelectorAll('.input-field');
for (var n = 0; n < elements.length; n++) {
var instance = new Input(elements[n]);
}
})()
<div class="input-field">
<label class="input-field__label">Name</label>
<input type="text" name="name" class="input-field__input">
</div>
<div class="input-field">
<label class="input-field__label">Last</label>
<input type="text" name="last" class="input-field__input">
</div>
这篇关于附加到JS对象的HTML元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:附加到JS对象的HTML元素
猜你喜欢
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- Flexslider 箭头未正确显示 2022-01-01
- addEventListener 在 IE 11 中不起作用 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01