Использование 2 разных скриптов на одном и том же флажке

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>

Теперь они работают отлично в одиночку, но когда я их объединяю, работает только тот, который ограничивает количество проверенных ящиков. Есть ли способ заставить их работать вместе?

Теги:
background
checkbox
limit

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/.

Также, если это еще не ясно, вы можете удалить атрибуты onclick в html, поскольку они все равно перезаписываются.

  • 0
    это вроде работает, но меняет только цвет второго столбца (отметив любой из 3 полей). Когда я пишу var fila = i вместо var fila = i + 1, это только изменяет de bg первого ...
  • 0
    Мой плохой, fila должен быть установлен во IIFE, чтобы каждый экземпляр не передавал один и тот же параметр. Я отредактировал свой ответ.
Показать ещё 1 комментарий
0

почему вы должны сделать две отдельные функции? Вы можете вызвать только одну функцию и попробовать поставить аргумент.

  • 0
    На самом деле они мне не нужны отдельно. Я просто использовал их для разных проектов некоторое время назад и подумал, что смогу использовать их вместе для чего-то, что я сейчас работаю. Я также пытаюсь сделать один сценарий, чтобы сделать обе вещи, но все же могу пройти через него.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню