Десь тому мені було потрібно щось дуже схоже ... і я це отримав.
Тож, що я вкладаю сюди, це те, як я роблю трюки, щоб форма могла бути представлена JavaScript без будь-якої перевірки та виконання перевірки лише тоді, коли користувач натискає кнопку (як правило, кнопку відправки).
Для прикладу я використовуватиму мінімальну форму, лише з двома полями та кнопкою подання.
Пам’ятайте, що потрібно: з JavaScript це потрібно мати можливість подавати без будь-якої перевірки. Однак якщо користувач натискає таку кнопку, перевірку потрібно виконати, а форму надсилати лише у разі проходження перевірки.
Зазвичай все починається з чогось поблизу (я видалив усі зайві речі, не важливі):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Подивіться, як тег форми не має onsubmit="..."
(пам’ятайте, це було умовою не мати його).
Проблема полягає в тому, що форма завжди подається, незалежно від того, onclick
повертається true
чи false
.
Якщо я замінюсь type="submit"
на type="button"
це, то, здається, це працює, але це не так. Він ніколи не надсилає форму, але це можна зробити легко.
Тож нарешті я використав це:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
І function Validator
де return True;
я також додаю речення для надсилання JavaScript, щось подібне до цього:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
Це id=""
тільки для JavaScript getElementById
, name=""
це лише для того, щоб він відображався на даних POST.
Так працює, як мені потрібно.
Я ставлю це лише людям, які не потребують onsubmit
функції у формі, але роблять певну перевірку, коли користувач натискає кнопку.
Чому мені не потрібно підписувати тег форми? Легко, в інших частинах JavaScript мені потрібно виконати подання, але я не хочу, щоб там було підтвердження.
Причина: Якщо користувач - це той, хто виконує подання, я хочу, і потрібна перевірка, але якщо це JavaScript, іноді мені потрібно виконати подання, тоді як такі перевірки уникнуть цього.
Це може здатися дивним, але не замислюючись, наприклад: при вході в систему ... з деякими обмеженнями ... як, наприклад, не дозволяється використовувати сеанси PHP, і жодне cookie не дозволено!
Отже, будь-яке посилання має бути перетворене на таку форму подання, щоб дані про вхід не втрачалися. Якщо вхід ще не виконаний, він також повинен працювати. Тому перевірка не повинна проводитися на посиланнях. Але я хочу представити повідомлення користувачеві, якщо користувач не ввів і поля, і користувача, і пропуск. Тож якщо одного немає, форму не потрібно надсилати! є проблема.
Дивіться проблему: форма не повинна надсилатися, коли одне поле порожнє, лише якщо користувач натиснув кнопку, якщо це код JavaScript, він повинен мати можливість надсилати.
Якщо я виконую роботу над onsubmit
тегом форми, мені потрібно знати, чи це користувач, чи інший JavaScript. Оскільки жодні параметри не можуть бути передані, це неможливо безпосередньо, тому деякі люди додають змінну, щоб сказати, чи потрібно виконати перевірку чи ні. Перше, що стосується функції перевірки, - це перевірити значення змінної тощо. Занадто складний і код не говорить про те, що насправді потрібно.
Тож рішення - не мати підписки на тезі форми. Інсейд поклав її там, де це дійсно потрібно, на кнопку.
З іншого боку, навіщо ставити код подання, оскільки концептуально я не хочу перевірити подання. Я дуже хочу перевірити кнопку.
Код не тільки зрозуміліший, він і повинен бути. Пам'ятайте лише про це: - Я не хочу, щоб JavaScript перевіряв форму (це завжди повинно робити PHP на стороні сервера) - Я хочу показати користувачеві повідомлення про те, що всі поля не повинні бути порожніми, для чого потрібен JavaScript (клієнт сторона)
То чому деякі люди (подумайте чи скажіть мені) це потрібно зробити на короткий час? Ні, концептуально я не роблю навантаження, яке перевіряється на стороні клієнта. Я просто щось роблю на натисканні кнопки, так чому б не просто дозволити це реалізовувати?
Добре, що код і стиль справляють трюк ідеально. На будь-який JavaScript, який мені потрібно надіслати форму, яку я просто помістив:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
І це пропускає перевірку, коли мені це не потрібно. Він просто надсилає форму та завантажує іншу сторінку тощо.
Але якщо користувач натискає кнопку "Надіслати" (він же type="button"
не type="submit"
), перевірка проводиться перед тим, як форму надсилати, а якщо недійсна - не надсилається.
Сподіваємось, це допомагає іншим не пробувати довгий і складний код. Просто не використовуйте, onsubmit
якщо не потрібно, а використовуйте onclick
. Але тільки НЕ забудьте змінити type="submit"
до type="button"
і , будь ласка , не забудьте зробити з submit()
допомогою JavaScript.