Поиск всех переключателей в «неизвестной» форме - PullRequest
3 голосов
/ 18 декабря 2011

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

Спасибо

Ответы [ 3 ]

1 голос
/ 18 декабря 2011

Во время отправки обработчика форма доступна через ключевое слово this или как свойство event.currentTarget.Обратите внимание, что если вы используете встроенный обработчик событий, то вам нужно передать соответствующую переменную в любую глобальную функцию, например, <form onsubmit="checkRadios(this);">.Затем вы можете перебрать свойство elements формы, чтобы найти ваши переключатели.

1 голос
/ 18 декабря 2011

Демо: http://jsfiddle.net/rBaUM/16/

  function onSubmitForSomeForm() {
        var groups = {},
            group;
        [].forEach.call(this.elements, function (input) {
            if (input.type === "radio" && input.name) {
                groups[input.name] = groups[input.name] || [];
                groups[input.name].push(input.checked);
            }
        });
        for (group in groups) {
            if (!groups[group].some(function (checked) {
                return checked;
            })) {
                return false; //Some group was completely unchecked
            };
        }
        return true;
    }


console.log( "Both groups completely unchecked", onSubmitForSomeForm.call( document.myform ) );
document.myform.check_list2[0].checked = true;
console.log( "1st group completely unchecked", onSubmitForSomeForm.call( document.myform ) );
document.myform.check_list2[0].checked = false;
document.myform.check_list[0].checked = true;
console.log( "2nd group completely unchecked", onSubmitForSomeForm.call( document.myform ) );
document.myform.check_list2[0].checked = true;
console.log( "Both groups have checked checkbox", onSubmitForSomeForm.call( document.myform ) );

Необходимо подложить .forEach и .some

Для использования:

<form onsubmit="return onSubmitForSomeForm.call(this);"></form>

Или:

myform.onsubmit = onSubmitForSomeForm

Или:

myform.addEventListener( "submit", onSubmitForSomeForm, false );

0 голосов
/ 18 декабря 2011

Получить все переключатели и создать массив атрибутов имени.Затем проверьте, если все они содержат отмеченный пункт:

...