javascript - 无法将输入元素传递给函数以获取数据属性
问题描述
你能看看这个演示,让我知道为什么我不能将它传递给$("#sample")
一个像下面这样的函数吗?
function GetAtts(elem) {
var x = elem.data('x');
var y = elem.data('y');
console.log(x + ' ' + y);
}
function GetAttsThis(elem) {
var x = this.data('x');
var y = this.data('y');
console.log(x + ' ' + y);
}
GetAtts('sample');
GetAtts('$("#sample")');
GetAttsThis('sample');
这是演示
function GetAtts(elem) {
var x = elem.data('x');
var y = elem.data('y');
console.log(x + ' ' + y);
}
function GetAttsThis(elem) {
var x = this.data('x');
var y = this.data('y');
console.log(x + ' ' + y);
}
GetAtts('sample');
GetAtts('$("#sample")');
GetAttsThis('sample');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="sample" type="text" data-x="5" data-y="20">
如您所见,我得到了
未捕获的类型错误:elem.data 不是函数
和
未捕获的 TypeError:this.data 不是函数
两种形式的函数
解决方案
你必须像这样传递对象:
GetAtts($("#sample"));
this
关键字不引用输入,因为您在没有特定上下文的情况下使用它。
您可以使用该.apply()
方法设置this
为$("#sample")
函数的范围内,例如:
GetAttsThis.apply($("#sample"));
function GetAtts(elem) {
var x = elem.data('limitn');
var y = elem.data('limitp');
console.log(x + ' ' + y);
}
function GetAttsThis() {
var x = this.data('limitn');
var y = this.data('limitp');
console.log(x + ' ' + y);
}
GetAtts($("#sample"));
GetAttsThis.apply($("#sample"));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="sample" type="text" data-limitn="5" data-limitp="20">
推荐阅读
- python - Python HTTP 服务器在返回多处理队列时对 POST 响应进行无限循环
- apache-kafka - 标记每个 KafkaStreams 实例的日志消息
- html - Bootstrap 4 - 选项卡上表格的固定/粘性标题
- mysql - MySQL 使用正则表达式来查找两个表之间的匹配项
- regex - 在某些“分隔符”之后全局替换所有连字符
- sql - 在 knex 中绑定一个数组 - 预期 4 个绑定,看到 1
- excel - 无法运行宏“_____” 在 Powershell 中运行 Excel 宏
- discord.py - Discord.py 创建嵌入消息命令
- python - Discord.py 在机器人启动时离开公会
- git - 为什么我的 git '跟踪文件'没有显示在我的工作目录中?以及如何将其移回我的工作目录