Javascript 将此和变量传递给导入的函数onclick
我完全被这段代码搞糊涂了,它似乎根本不起作用。 简单地说,就是这样:Javascript 将此和变量传递给导入的函数onclick,javascript,ecmascript-6,Javascript,Ecmascript 6,我完全被这段代码搞糊涂了,它似乎根本不起作用。 简单地说,就是这样: // in app.js import {layoutItemButtonClick} from '/blablaWrappeur.js' document.addEventListener('DOMContentLoaded', function () { var element = document.querySelector('.qq-element') //this is a html element ob
// in app.js
import {layoutItemButtonClick} from '/blablaWrappeur.js'
document.addEventListener('DOMContentLoaded', function () {
var element = document.querySelector('.qq-element') //this is a html element obj
$('.layout-item-button').click(layoutItemButtonClick)
})
//in blablaWrappeur.js
export const layoutItemButtonClick = function () {
const selectedLayout = this.dataset.layout.split("")
doQqthing(element) // element is not defined
}
function doQqthing(element) {
alert(element) /// not defined
}
我需要将元素和单击按钮的this上下文传递给layoutItemButtonClick函数,然后在其中传递给doQqthing函数
但是,它不是这样工作的
1)如果我让代码像这样运行并单击按钮,则不会发生任何事情
2)现在,如果我将click函数更改为this(将这些添加到函数调用中:
$('.layout-item-button').click(function () {
layoutItemButtonClick()
})
我得到一个数据集未定义的错误
3)如果我将其更改为:
$('.layout-item-button').click(layoutItemButtonClick())
我也犯了同样的错误
4)为此:
$('.layout-item-button').click(layoutItemButtonClick)
我得到一个元素未定义
错误
我知道,如果我在函数中调用函数,这将是当前元素,如果在单击括号中,如3)和4),这将是本地范围。那么,如何将元素和this从单击传递到函数中呢
当调用定义为常量的函数时,为什么/如何使用括号起作用
提前谢谢
当调用定义为常量的函数时,为什么/如何使用括号起作用
layoutitembutton单击
与其他变量访问类似。它解析为变量的值,该变量是函数对象
layoutItemButtonClick()
otoh调用该函数并解析为其返回值
所以,
$('.layout-item-button').click(layoutItemButtonClick())
将布局项按钮的返回值单击
(它是未定义的
)传递到。单击
$('.layout-item-button').click(layoutItemButtonClick())
将函数对象本身传递给。单击
我得到一个元素未定义
错误
这是正确的,因为元素
未在layoutItemButtonClick
可访问的范围中定义。它仅在DOMContentLoaded
事件处理程序中定义
您必须将元素
作为参数传递给layoutitembutton单击
。因此,函数应该声明为
export const layoutItemButtonClick = function(element) { ... }
现在我们需要调用layoutitembutton单击
,这样这个
引用被单击的元素,我们将元素
作为参数传递。我们可以使用。调用:
$('.layout-item-button').click(function() {
layoutItemButtonClick.call(this, element);
});
但是,不需要在layoutItemButtonClick
内使用此
。我们可以将触发事件的元素设为显式参数:
export const layoutItemButtonClick = function(trigger, element) {
const selectedLayout = trigger.dataset.layout.split("")
doQqthing(element);
};
并称之为
$('.layout-item-button').click(function() {
layoutItemButtonClick(this, element);
});
@伯吉修好了!对不起:)