是否有一个 javascript 函数可以找到调用者 id

Posted

技术标签:

【中文标题】是否有一个 javascript 函数可以找到调用者 id【英文标题】:Is there a javascript function that finds the callers id 【发布时间】:2022-01-24 02:22:47 【问题描述】:

好的,所以基本上我在 html 中使用按钮类型,例如,我有两个具有不同 id 的按钮:

<button id='Sucky27' class="btn27"></button>
<button id='Sucky28' class="btn28"></button>

按钮调用javascript函数如下:

document.getElementById("Sucky28").addEventListener("click", function() 
document.querySelector(".BuildingMenu").style.display = "flex";
)

当按下按钮时,它会打开一个建筑菜单,然后当你点击菜单中的一个项目时,即运行它的房子

document.getElementById("House").addEventListener("click", function() 
document.querySelector("function.caller.id").style.backgroundImage = "url(./download.PNG)";
)

我想知道 querySelector 是否有办法找到启动构建菜单的调用者的 id,所以如果 idsucky27 打开菜单,它会使用它的 id 并更改它的属性

我希望我解释得足够好让你理解

【问题讨论】:

事件处理程序中this 的值将是对该元素的引用。你不需要 id。 @Pointy 你是什么意思,如果你介意详细说明,因为我对 javascript 很陌生, 【参考方案1】:

事件处理程序具有通过 this 附加到的元素的上下文。

const exampleBtn = document.getElementById("example");

let clicked = false;
exampleBtn.addEventListener("click", function(evt) 
  this.style.backgroundColor = clicked ? "green" : "red";
  clicked = !clicked;
);
&lt;button id="example"&gt;Click&lt;/button&gt;

【讨论】:

【参考方案2】:

如果您想要多个具有相同功能的按钮,您应该使用一个类,使用getElementsByClassName 找到它们,then loop over each 然后将状态分配给元素上的dataset。

[].forEach.call(document.getElementsByClassName('btn-coloured'), function (el) 
  el.addEventListener("click", function(evt) 
    this.style.backgroundColor = this.dataset.clicked ? "green" : "red";
    this.dataset.clicked = !this.dataset.clicked;
  )
);
<button class="btn-coloured">Click</button>
<button class="btn-coloured">Click</button>
<button class="btn-coloured">Click</button>

否则,您最终会重复按钮 2 的代码

【讨论】:

【参考方案3】:

不知道对你有没有帮助,但是我很早以前就用过localStorage和sessionStorage来保存这种东西以备后用。

例子:

document.getElementById("Sucky28").addEventListener("click", function() 
sessionStorage.setItem('triggeredBtnId', 'Sucky28');
document.querySelector(".BuildingMenu").style.display = "flex";
)

然后:

document.getElementById("House").addEventListener("click", function() 
const triggeredBtnId = sessionStorage.getItem('triggeredBtnId');
document.querySelector(triggeredBtnId).style.backgroundImage = "url(./download.PNG)";
)

当浏览器或标签页关闭时,这个 sessionStorage 变量将被自动删除。

【讨论】:

Uncaught TypeError: Cannot read properties of null (reading 'style') 是我得到的 这太过分了(并且会在某些浏览器配置上中断)——你可以只使用一个变量。

以上是关于是否有一个 javascript 函数可以找到调用者 id的主要内容,如果未能解决你的问题,请参考以下文章

可以在android中调用javascript函数吗?

是否可以使用 Emscripten 从 JavaScript 调用 C++ 函数?

如何远程检查 JavaScript 应用程序的函数调用堆栈?

用 javascript 调用函数的抽象方法。可以做到吗?

从 Angular 中的 JavaScript 文件调用 Typescript 函数

从URL /地址栏调用Javascript函数