【问题标题】:Adding addtional content (+=) to an HTML attribute向 HTML 属性添加附加内容 (+=)
【发布时间】:2016-11-07 16:42:17
【问题描述】:

我有一个 HTML onclick 属性,我试图在不删除现有属性的情况下在按键上动态添加其他属性。 也就是说……

说我有

<button onclick="doThis(1)">

每次按下按钮时,我都想添加,所以第一次按下按钮时,你会得到

<button onclick="doThis(1), doThis(2)">

第三次:

<button onclick="doThis(1), doThis(2), doThis(3)">

等等

有什么办法吗

document.getElementById("mybtn").onclick += doThis($n{index};

还是我只需要独立构建字符串?

如果不建立一个大字符串来添加到 setAttribute,我似乎无法弄清楚。当我尝试上面的 JS 代码的变体时,我的浏览器崩溃了:(

谢谢你看看!!

【问题讨论】:

  • 只有一个处理逻辑的 onclick 处理程序会更有意义。只需有一个数组,您可以在其中添加要使用给定参数运行的函数。然后您的处理程序可以简单地遍历数组并以正确的顺序执行它们。
  • @Liam 不,这不是一回事。
  • 请考虑这可能是一个错字:document.getLelemtById("mybtn").onclick += doThis($n{index};,应该是getElementById
  • @GillesC 谢谢!问题是函数会根据用户交互动态增长或缩小。我需要相同的 onclick 来处理相同的功能,但可能需要同时调用几次。这个用例会在这个项目中多次出现,所以“setAttribute”类型的解决方案效果最好……如果可能的话。

标签: javascript html ecmascript-6


【解决方案1】:

好的,我真的不喜欢这个答案,但它确实可以满足您的需求。我不喜欢它,因为它依赖于将事件处理程序设置为 DOM 对象的属性,而不是使用 W3C DOM Level 2 事件模型。但是,除此之外,给你...

window.doThisCounter = 1;
var eventList = "";

function doThis(){
      console.log(eventList);
      window.doThisCounter++;
      eventList += "doThis(" + window.doThisCounter + ");";
      btnGo.setAttribute("onclick", eventList);
}


// This will execute once, when page is ready:
window.addEventListener("DOMContentLoaded", function(){
  
  var btn = document.getElementById("btnGo");

  (function(counter){
    eventList = "doThis(1);";
    btnGo.setAttribute("onclick", eventList);
  }(window.doThisCounter));
  
});
&lt;button id="btnGo"&gt;Click Me!&lt;/button&gt;

【讨论】:

  • 那不会做OP所追求的。每个处理程序都将具有相同的 doThisCounter 值,这意味着当 doThis 运行时 counter 参数对所有处理程序都是相同的。
  • @GillesC 显然,您没有运行代码。参数随着每个新的事件处理程序注册而增加 - 正如 OP 所示。 counter 周围没有关闭。
  • 斯科特,谢谢你的明确回答,但我认为我的解释不正确。如果每次有人点击“点击我”,就会启动第二个计数器。相同的功能、相同的代码、相同的名称,但对相同函数的独立调用(虽然原始函数存在)。希望这是有道理的。
  • 是的,但只有新号码正在运行,而不是旧号码,这不是 OP 所追求的。在第三次之后,他通过onclick="doThis(1), doThis(2), doThis(3)" 明确了这一点。如1 需要再次使用。
  • @Fedreg 我认为您没有清楚地解释自己。这段代码确实做到了这一点。我问你……第二次点击,应该运行多少个函数?
猜你喜欢
  • 2011-06-12
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
相关资源
最近更新 更多