Прототип выбрать все флажки код работает в IE, но не в Firefox - PullRequest
1 голос
/ 14 апреля 2009

Я использую прототип 1.6.0.1. Я пытаюсь установить все флажки при нажатии кнопки. Этот код работает в IE 6, но НЕ в Firefox 3. Что я делаю не так?

<input class="submit" type="button" value="check all" onclick="$(this.form).getInputs('checkbox').each(function (elem) {elem.checked = true;});" />

Ответы [ 4 ]

3 голосов
/ 14 апреля 2009

Я создал очень простую страницу для проверки вашей проблемы:

<html>
<head>
    <script type="text/javascript" src="prototype-1.6.0.3.js" ></script>
</head>
<body>
    <form>
        <input type="checkbox" id="test1" /> Test 1<br/>
        <input type="checkbox" id="test2" /> Test 2<br/>
        <input type="checkbox" id="test3" /> Test 3<br/>
        <input type="checkbox" id="test4" /> Test 4<br/>
        <input class="submit" type="button" value="check all" onclick="$(this.form).getInputs('checkbox').each(function (elem) {elem.checked = true;});" />
    </form>
</body>
</html>

и он отлично работает в Firefox 3.0.8 (а также в IE) ...

Я не согласен с другими ответами ... this.form должен быть в порядке (получает объект формы от кнопки отправки, которая затем должна позволить вам получить флажки от него через getInputs).

В чем проблема? Ничего не происходит вообще? Если так, то единственное, о чем я могу подумать, это флажки в той же форме, что и кнопка?

РЕДАКТИРОВАТЬ: Если ваш код фактически такой же, как и выше, и он не работает, лучшее, что я могу предложить, - это превратить ваш onclick в вызов функции propper и затем использовать firebug , чтобы определить, какой именно бит не работает. То есть сделайте так, чтобы ваш код выглядел так:

<html>
<head>
    <script type="text/javascript" src="prototype-1.6.0.3.js" ></script>
    <script type="text/javascript" >
        function checkAll(button) {
            var form = $(button.form);
            var inputs = form.getInputs('checkbox');
            inputs.each(function (elem) {
                elem.checked = true;
            });
        }
    </script>
</head>
<body>
    <form>
        <input type="checkbox" /> Test 1<br/>
        <input type="checkbox" /> Test 2<br/>
        <input type="checkbox" /> Test 3<br/>
        <input type="checkbox" /> Test 4<br/>
        <input class="submit" type="button" value="check all" onclick="checkAll(this)" />
    </form>
</body>
</html>

Затем вы можете поместить точки останова в функцию и убедиться, что «кнопка», «форма» и «входы» - это то, что вы ожидаете, и что «элемент» в каждом цикле тоже.

0 голосов
/ 26 июня 2009

Вы можете увидеть решение по этой ссылке: http://www.ryboe.com/2008/07/10/select-all-checkboxes-with-prototype-js.html

Если вы не хотите нажимать, попробуйте это:

var form = $('options');
checkboxes = form.getInputs('checkbox');
checkboxes.each(function(e){ e.checked = 0 });
0 голосов
/ 14 апреля 2009

Форма является родителем ввода, поэтому this.form не имеет смысла. Используйте селектор идентификатора или родительский элемент.

Второе - объявите этот js, чтобы назначить действие при загрузке документа, этот способ немного запутан, отделите js от html, чтобы иметь чистую гибкую базу кода.

В jQuery это будет что-то вроде:

$(document).ready(function(){
  $.('#submitId').click(function(){ 
    // check the checkboxes
    });
}

в прототипе должно быть похоже.

0 голосов
/ 14 апреля 2009

Что вы замените

$(this.form) 

с

$('MYFORMNAME')

...