【问题标题】:Combining two functions together so both work将两个功能结合在一起,使两者都能工作
【发布时间】:2025-11-29 02:10:02
【问题描述】:

我正在尝试将两个功能组合在一起,以便它们同时进行。我该怎么做?

这里是 JavaScript:

function showTicks()
{
    if (chooseShield.value == ("ely"))
    {
        document.getElementById("cb1").disabled=false;
        document.getElementById("cb2").disabled=false;
        document.getElementById("cb3").disabled=false;
        document.getElementById("cb4").disabled=false;
        document.getElementById("cb5").disabled=true;
        document.getElementById("cb6").disabled=true;
        document.getElementById("cb7").disabled=true;
        document.getElementById("cb8").disabled=true;
        document.getElementById("cb9").disabled=true;   
    }
}

function checkchecks() 
{
    if(likeShield.value == ("noShield") && chooseShield.value == ("ely") && (cb3.checked   == true || cb4.checked == true))
    {
        document.getElementById("cb2").checked=true;
    }

    likeShield.onchange=checkchecks
    chooseShield.onchange=checkchecks
    cb3.onchange=checkchecks
    cb4.onchange=checkchecks
}

  function doBoth() {
  checkAll();
  checkchecks();
}
likeShield.onchange=doBoth;
chooseShie;d.onchange=doBoth;
cb3.onchange=doBoth;
cb4.onchange=doBoth;

第一个函数禁用除 1、2、3 和 4 之外的所有复选框。第二个函数应该允许用户单击 3 或 4,这将自动选中复选框 2。但只有第二个函数有效,第一个函数是忽略。 html中的onchange = "showTicks()"。

【问题讨论】:

  • 分号不是可选的。缩进也不是。请不要写== true
  • 没有它们,代码会干净得多。在大多数情况下,它们绝对是可选的。 An Open Letter to JavaScript Leaders Regarding Semicolons
  • mislav.uniqpath.com/2010/05/semicolons 是否使用分号是一个偏好问题。缩进会很好
  • @techfoobar:我知道它们是“可选的”,但没有好的代码会省略分号,所以我只是说它们在 Stack Overflow 上不是可选的,它明白了这一点。 :)
  • @minitech,哦,我不知道你是世界权威,而且你家里有良好代码的黄金标准。

标签: javascript html javascript-events


【解决方案1】:

你可以这样做:

var doBoth = function(){
      showTicks();
      checkchecks();
};
likeShield.onchange=doBoth;
chooseShield.onchange=doBoth;
cb3.onchange=doBoth;
cb4.onchange=doBoth;

另一种选择是使用 addEventListener :

likeShield.addEventListener('change', showTicks);
likeShield.addEventListener('change', checkchecks);

但在你的情况下会更冗长。

当然,如果你的两个函数没有其他用途,最简单的方法是将 showTicks 函数的代码放入 checkchecks 函数中。

另外,不要忘记确保定义了像 chooseShield 这样的变量。以下是定义变量的方法:

var chooseShield = document.getElementById('chooseShield');
var likeShield = document.getElementById('likeShield');
for (var i=1; i<10; i++) window['cb'+i]=document.getElementById('cb'+i);

DEMONSTRATION

【讨论】:

  • 嗯,这似乎不起作用。我是否需要为此创建另一个函数。如果是这样,你编辑我的第一篇文章。
  • 我更新了第一个帖子可以吗?因为它仍然无法正常工作。请您更正一下。
  • 我做了一个示范。这次你真的应该可以接受了。
  • 好的,HTML 上的 onchange 应该是什么?两者都有 onchange="showTicks()" 吗?
  • 不要在 HTML 中添加 onchange(我只是编辑了小提琴以删除它们)。只需在脚本中定义“更改”事件侦听器即可。