【问题标题】:Javascript onchange checkbox cancelJavascript onchange复选框取消
【发布时间】:2018-05-17 00:57:10
【问题描述】:

我在这里的第一个问题,真的希望能学到很多东西。我实际上不是我创业公司的技术人员,而是因为缺乏尝试自己做事的原因:-)

我为我的模块订购系统创建了一个 onchange 事件。当我单击复选框时,所选模块会出现在摘要中。这行得通。但是当我取消选中该复选框时,我希望模块从摘要中消失。现在不行了。我必须在 JS 中进行哪些更改才能做到这一点?

复选框

<input type="checkbox" class="custom-control-input" 
  onchange="modulecontractsSelect(this, event)">

总结

<p id="module-contracts-summary"> </p>
<p id="module-contracts-summary-price"> </p>

Javascript

function modulecontractsSelect() {
    document.getElementById("module-contracts-summary").innerHTML = "Module contractbeheer"
    document.getElementById("module-contracts-summary-price").innerHTML = "€5 / mnd";
}

提前致谢!

【问题讨论】:

  • 因为你的函数根本不知道是否选中了复选框,并且在第一名你的函数甚至对复选框一无所知,你没有设置。顺便提一句。我真的认为你不需要event,只需要this...有小提琴示例jsfiddle.net/hej11u6g

标签: javascript html events checkbox onchange


【解决方案1】:

首先,将checkboxonchange 事件更改为仅传递itlsef(如this)作为参数。您实际上不需要将事件作为参数传递:

<input type="checkbox" class="custom-control-input" onchange="modulecontractsSelect(this);">

然后,更改您的 modulecontractsSelect 函数以接收复选框 (this) 作为参数(我用下面的箭头为您突出显示了它)。如果复选框为checked,则设置innerHTML 值。如果不是checked,则设置为空字符串:

                                   ▼
function modulecontractsSelect(checkbox) {
    if (checkbox.checked) {
       document.getElementById("module-contracts-summary").innerHTML = "Module contractbeheer"
       document.getElementById("module-contracts-summary-price").innerHTML = "€5 / mnd";
    }
    else {
       document.getElementById("module-contracts-summary").innerHTML  = "";
       document.getElementById("module-contracts-summary-price").innerHTML  = "";
    }
}

【讨论】:

    【解决方案2】:

    将您的复选框代码更改为:

    <input type="checkbox" class="custom-control-input" onchange="modulecontractsSelect(this.checked)">
    

    然后将您的 modulecontractsSelect 函数更改为:

    function modulecontractsSelect(is_checked) {
        if( is_checked ) {
            document.getElementById("module-contracts-summary").innerHTML = "Module contractbeheer"
            document.getElementById("module-contracts-summary-price").innerHTML = "€5 / mnd";
        } else {
            document.getElementById("module-contracts-summary").innerHTML = "";
            document.getElementById("module-contracts-summary-price").innerHTML = "";
        }
    }
    

    请注意我没有测试过这段代码,但你应该明白了。

    【讨论】:

    • 只有投反对票才能表明这个世界是多么不负责任,请解释一下。特别是考虑到我上面的答案已被编辑以匹配我的答案。
    • 我不仅没有否决你的回答,我自己也赞成。
    • 我没有投反对票,但是,也许是因为请注意我没有测试过这段代码,而且很久以前就有人在评论中回答了。
    • 两个答案的发布时间大致相同,我的答案可能迟到了一分钟左右。但是感谢您的解释。
    • 感谢您的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多