【发布时间】:2016-12-03 09:35:59
【问题描述】:
我正在尝试在一个项目中将尽可能多的 jQuery 转换为原生 JavaScript,部分是为了学习更多的 JS。
下面是我的一些代码,当焦点和模糊使其再次变小时扩展文本区域。
除了在加载 DOM 后插入到 DOM 中的一个 textarea 字段之外,它工作得很好,我怎样才能在不使用 jQuery 的情况下使其也适用于这些项目?
(function() {
var descriptions = document.querySelectorAll('.edit_description');
for (var i = 0; i < descriptions.length; i++){
descriptions[i].addEventListener('blur', handler, false);
descriptions[i].addEventListener('focus', handler, false);
}
//descriptions.addEventListener('blur', handler, false);
//descriptions.addEventListener('focus', handler, false);
function handler(event) {
if (event.type === "blur") {
// It's a blur event
this.setAttribute("style","height:18px;");
this.style.height = "18px";
}
else {
// It must be a focus event
this.setAttribute("style","height:10em;");
this.style.height = "10em";
}
}
})();
这个 jQuery 版本完美地工作,即使是在 DOM 已经加载之后添加的文本字段也是我需要重现的,但是在不依赖其他库(如 jQuery)的原生 JavaScript 中......
$(document).on("focus", "textarea.edit_description", function() {
$(this).addClass("expanding")
$(this).animate({
height: "10em"
}, 500);
});
$(document).on("blur", "textarea.edit_description", function() {
$(this).animate({
height: "18px"
}, 500);
$(this).removeClass("expanding")
});
【问题讨论】:
-
为我们提供小提琴。
-
如果您在页面加载/文档准备就绪时运行此代码,那么其他新元素不存在,那么为什么它会有一个处理程序?添加元素时需要添加处理程序。
-
事件委托应该是您正在寻找的模式。
标签: javascript jquery