Как отменить последний установленный флажок? - PullRequest
3 голосов
/ 11 марта 2009

Привет! Я создал функцию javascript, чтобы проверить, больше ли количество выбранных модулей, чем заданное значение. Таким образом, каждый раз, когда вызывается флажок, вызывается функция, и функция проходит через все флажки и вычисляет сумму, чтобы увидеть, больше ли она. Но проблема в том, что когда пользователь устанавливает флажок, и если общее количество кредитов превышает значение, я хочу установить флажок флажок флажок = false. Но я не знаю, какой флажок отменить. Есть ли функция отмены последнего клика в javascript?

Ответы [ 6 ]

7 голосов
/ 11 марта 2009

Не совсем, но вы можете подделать его достаточно легко, сохранив последний щелчок. Этот код может не работать дословно, но вы поняли:

<script>
var last_checked_box;

function onBoxClicked( box ) {
   if ( box.checked ) last_checked_box = box;
}

function undoLastBox() {
   if ( last_checked_box ) last_checked_box.checked = false;
}
</script>

<input type="checkbox" id="box1" onClick="onBoxClicked(this)"/>
...
6 голосов
/ 11 марта 2009

Используя jQuery , вы можете сделать что-то вроде:

var MAX_CREDITS = 50; // just as an example
$("input[type=checkbox]").change(function (){
  var totalCredits = 0;
  $("input[type=checkbox]").each(function (){
    // augment totalCredits accordingly to each checkbox.
  });

  if(totalCredits > MAX_CREDITS){
    $(this).removeAttr("checked");
  }
});

Если вы никогда раньше не использовали jQuery, это, несомненно, похоже на боль для ваших глаз; но, как вы видите, это очень мощно, и ваша проблема может быть решена в несколько строк. Я бы порекомендовал вам изучить его и попробовать;)

1 голос
/ 11 марта 2009

Я знаю, что это не тот ответ, который вы искали, но не лучше ли было бы отключать все непроверенные флажки, когда достигнуто максимальное количество проверок?

0 голосов
/ 11 марта 2009

Вот минимальное, но полностью функциональное решение без jQuery:

<script>
function isBox(element) {
    return element.form && element.form === document.forms[0] &&
        element.nodeName.toLowerCase() === 'input' &&
        element.type === 'checkbox';
}

function remaining(dR) {
    var field = document.forms[0].elements[0],
        value = +field.value;

    if(dR) return field.value = value + dR;
    else return value;
}

function listener(event) {
    var box = (event && event.target) ||
        (window.event && window.event.srcElement);

    if(isBox(box)) {
        if(box.checked) {
            if(remaining() > 0)
                remaining(-1);
            else box.checked = false;
        }
        else remaining(+1);
    }
}

if(document.addEventListener)
    document.addEventListener('click', listener, false);
else if(document.attachEvent)
    document.attachEvent('onclick', listener);
</script>
<form>
 <p>remaining: <input type="text" readonly="readonly" value="2"></p>
 <p><input type="checkbox" id="b1"><label for="b1">box1</label></p>
 <p><input type="checkbox" id="b2"><label for="b2">box2</label></p>
 <p><input type="checkbox" id="b3"><label for="b3">box3</label></p>
</form>
0 голосов
/ 11 марта 2009

Я предлагаю либо проверить, было ли проверено максимальное количество объектов, и, если установлено значение true, снять галочку все тем же методом, или вы установите значение для некоторого скрытого текстового поля в качестве идентификатора вашего последнего проверенного флажка, чтобы вы могли сослаться на это снова.

0 голосов
/ 11 марта 2009

Я не думаю, что это так, но вы всегда можете сохранить ссылку на последний отмеченный флажок, поэтому, когда вам нужно снять флажок, у вас это есть прямо здесь.

...