0

所以我正在尝试使用以下脚本:

//Limit of checked checkboxes    
function checkboxlimit(checkgroup, limit){
  var checkgroup=checkgroup
  var limit=limit
  for (var i=0; i<checkgroup.length; i++){
    checkgroup[i].onclick=function(){
      var checkedcount=0
      for (var i=0; i<checkgroup.length; i++)
          checkedcount+=(checkgroup[i].checked)? 1 : 0
      if (checkedcount>limit){
        alert("You can only select a maximum of "+limit+" checkboxes")
        this.checked=false
      }
    }
  }
}

//change bg color if checked 
var seleccionado=new Array()
function cambia(fila){
  if(seleccionado[fila]!=true)
  {
    document.getElementById("fila"+fila).style.background='#A5FA9B';
    document.getElementById("fila"+fila).style.color='#FFFFFF';
    seleccionado[fila]=true;
  }
  else
  {
    document.getElementById("fila"+fila).style.background='#FFF3D6';
    document.getElementById("fila"+fila).style.color='#000000';
    seleccionado[fila]=false;
  } 
}

因此,第一个函数将限制您可以选择的复选框数量,第二个函数将在选中后更改单元格背景的颜色。HTML 将类似于:

<form id="main" name="main" method="POST">
  <font face="verdana">
    <table>
      <tr  >
        <td  id="fila1">FIRST<input name="ckb" onclick="cambia(1)" type="checkbox"/></td>
        <td  id="fila2">SECOND<input name="ckb" onclick="cambia(2)" type="checkbox"/></td>
        <td  id="fila3">THIRD<input name="ckb" onclick="cambia(3)" type="checkbox"/></td> 
    </table>
  </font>
</form>

最后必须添加下一个脚本:

<script type="text/javascript">
  checkboxlimit(document.forms.main.ckb, 1);
</script>

现在,它们都可以完美地单独工作,但是当我将它们组合在一起时,只有一个限制复选框数量的工作。有没有办法让它们一起工作?

4

2 回答 2

0

问题是,当您调用 时checkboxlimit,它会覆盖这些元素上的点击处理程序。您可能想要做的是cambia从检查复选框数量的函数中调用:

function checkboxlimit(checkgroup, limit){
  var checkgroup=checkgroup
  var limit=limit
  for (var i=0; i<checkgroup.length; i++) {
    var fila = i + 1;
    checkgroup[i].onclick=(function(fila){
      return function () {
        var checkedcount=0
        for (var i=0; i<checkgroup.length; i++)
            checkedcount+=(checkgroup[i].checked)? 1 : 0
        if (checkedcount>limit){
          alert("You can only select a maximum of "+limit+" checkboxes")
          this.checked=false
        } else {
          cambia(fila);
        }
      }
    }(fila));
  }
}

这是假设您只想cambia在支票有效的情况下打电话。在http://jsfiddle.net/ultranaut/HN3Db/上摆弄。

此外,如果还不清楚,您可以删除onclickhtml 中的属性,因为它们无论如何都会被覆盖。

于 2013-10-19T20:17:45.033 回答
0

为什么你必须制作两个单独的功能?您只能调用一个函数并尝试在其中放置一个参数。

于 2013-10-19T20:15:34.967 回答