【问题标题】:How to implement onclick function directly in JavaScript code instead of html tag?如何直接在 JavaScript 代码而不是 html 标签中实现 onclick 功能?
【发布时间】:2020-01-16 14:33:59
【问题描述】:

以下链接包括我存储在 codepen 上的项目:

[https://codepen.io/adan96/pen/ExaRgOe?editors=1010]

之前我的 onclick 函数位于 html 标记中,但我想让它直接在 JS 代码中工作:

document.getElementById("requestTypeSelection").selectedIndex = -1;
document.getElementById("requestSubtypeSelection").selectedIndex = -1;
document.getElementsByClassName("batch")[0].selectedIndex = -1;
document.getElementsByClassName("batch")[1].selectedIndex = -1;

document.getElementById("button1").onclick = function() {openTab("click", generalData)};
document.getElementById("button2").onclick = function() {openTab("click", materialData)};

function openTab(evt, tabName) {
  var i, tabcontent, tablinks;

  tabcontent = document.getElementsByClassName("tabcontent");
  for (i = 0; i < tabcontent.length; i++) {
    tabcontent[i].style.display = "none";
  }

  tablinks = document.getElementsByClassName("tablinks");
  for (i = 0; i < tablinks.length; i++) {
    tablinks[i].className = tablinks[i].className.replace(" active", "");
    if (tabName != "generalData") {
      tablinks[0].style.backgroundColor = "#cfdeed";
    } else {
      tablinks[0].style.backgroundColor = "#8eb3dc";
    }
  }
  document.getElementById(tabName).style.display = "block";
  event.currentTarget.className += " active";
}

window.onload = function() {
  var i, tabcontent, tablinks;

  tabcontent = document.getElementsByClassName("tabcontent");
  for (i = 0; i < tabcontent.length; i++) {
    tabcontent[i].style.display = "none";
  }

  // Get all elements with class="tablinks" and remove the class "active"
  tablinks = document.getElementsByClassName("tablinks");
  for (i = 0; i < tablinks.length; i++) {
    tablinks[i].className = tablinks[i].className.replace(" active", "");
  }

  document.getElementById("generalData").style.display = "block";
  event.currentTarget.className += " active";
  tablinks[0].style.backgroundColor = "#8eb3dc";
};

var $select1 = $("#select1"),
  $select2 = $("#select2"),
  $options = $select2.find("option");

$select1
  .on("change", function() {
    $select2.html($options.filter('[value="' + this.value + '"]'));
  })
  .trigger("change");

单击 button1 和 button2 后,我应该会在它们下方看到它们的选项卡,但什么也没有出现。 您能建议如何修改代码吗?

【问题讨论】:

    标签: javascript button onclick addeventlistener


    【解决方案1】:

    使用EventTarget.addEventListener 将事件绑定到元素。 onclick 不是这样工作的。

    document.getElementById("button1").addEventListener("click", function() {
      console.log("Clicked");
    });
    &lt;button id="button1"&gt;Click Me&lt;/button&gt;

    如果openTab("click", materialData) 的第一个参数是实际的事件对象,那么你应该这样做:

    document.getElementById("button1").addEventListener("click", function(event) {
      console.log("Clicked");
      openTab(event, materialData)
    });
    

    【讨论】:

    • 好的,它工作。 “materialData”应该在引号之间。 ;)
    • 哦,我以为它是在顶部声明的变量。很高兴它奏效了。请通过将答案标记为正确来结束问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    相关资源
    最近更新 更多