[英]Is this proper JS for this J-Query expanding textArea? Is 'this' the same as event.target in JS also?
我在代码笔https://codepen.io/vsync/pen/frudD上遇到了一个扩展的textArea,它似乎运行良好。 驱动它的代码是:
$(document)
.one('focus.autoExpand', 'textarea.autoExpand', function(){
var savedValue = this.value;
this.value = '';
this.baseScrollHeight = this.scrollHeight;
this.value = savedValue;
})
.on('input.autoExpand', 'textarea.autoExpand', function(){
var minRows = this.getAttribute('data-min-rows')|0, rows;
this.rows = minRows;
rows = Math.ceil((this.scrollHeight - this.baseScrollHeight) / 16);
this.rows = minRows + rows;
});
我将其翻译成以下Javascript。 这似乎也运行良好,并且在控制台上没有出现任何错误:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>
<script>
'use strict';
function handler_focusin(e){
let savedValue = e.target.value;
e.target.value = '';
e.target.baseScrollHeight = e.target.scrollHeight;
e.target.value = savedValue;
}
function handler_input(e){
let minRows = e.target.getAttribute('data-min-rows')|0, rows;
e.target.rows = minRows;
rows = Math.ceil((e.target.scrollHeight - e.target.baseScrollHeight) / 16);
e.target.rows = minRows + rows;
}
let els = document.getElementsByClassName("autoExpand");
[...els].forEach( el => {
el.addEventListener('focusin', handler_focusin);
el.addEventListener('input', handler_input);
})
</script>
</body>
问题:
查看function_handler中的第一条语句(在JS版本和相应的jQuery
)。 那里有一个未声明的符号“行”。 有一个逗号运算符,所以我希望对行进行评估,但是控制台中没有错误。 然后将两个语句向下分配给行,再次没有声明也没有错误。
另外,为什么要麻烦逗号运算符,因为最后要评估并返回行?
在同一条语句中,我收集到“ data-min-rows”是可能由程序员定义的属性,因此,除非已添加该属性,否则它将返回undefined。 我认为,紧随其后的bitwise
或zero
优先,并且此操作返回零。
正确?
在jQuery中,“ this”显然与e.target相同。 (在几个参考文献中发现)。 但是,当我翻译代码时,我错过了将“ this”更改为e.target的机会,但仍然可以使用。
难道this
也可靠e.target
中Javascript
事件处理程序? (我从搜索中找到的引用似乎都是在谈论jQuery。)
jQuery
代码还将事件处理程序分配给textarea.autoExpand
但是'textarea'不是事件名称。 那是在做什么 在Java中有对应的东西吗?
var a, b;
声明2个变量,它是var a; var b;
的简写var a; var b;
var a; var b;
。
myVariable | 0
myVariable | 0
将变量“强制转换”为数字:
"wadsd" | 0
"wadsd" | 0
> 0
undefined | 0
undefined | 0
> 0
true | 0
true | 0
> 1
123 | 0
123 | 0
> 123
3:是的, this
是指e.currentTarget
。 ( 来源 )
4:那是委派的事件处理程序 。 它在类为.autoExpand的文本区域上侦听'focus.autoExpand'事件。 它已在文档中注册,因此可以在目标元素存在之前注册事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.