2013-10-15 2 views
0

Почему эта проверка формы не работает? я делаю это так:проверка формы javascript не работает должным образом

<form name="myForm" action="save-info.php" method="post" onsubmit="return(validu());"> 

http://jsfiddle.net/QrYmh/41/

Я пытаюсь добавить функцию проверки в моей форме, но он не работает, даже когда я вернусь непосредственно ложь. Форма по-прежнему отправлена ​​ Что не так?

Мне нужно добавить логику проверки для моих входов. Но я не могу это сделать. , ИС отладчик (светлячок) говорит ReferenceError: validu не определен

Пожалуйста, помогите

+0

Я не думаю, что вам нужен этот документ document.ready', не можете ли вы просто поместить функцию в голову/тело в тег 'script' и использовать его? – Harry

+0

[Проверить это] (http://jsfiddle.net/QrYmh/41/), просто удалите бит .ready и используйте pure js. – Kaf

+0

Ваша скрипка такая же, как у моей неработающей. Удаление части .ready получает тот же нерабочий результат. Разве вы не тестировали его первым? http://jsfiddle.net/QrYmh/59/ – user1137313

ответ

3

Поскольку вы уже используете JQuery, вы можете использовать как хорошо submit() method доступны.

Проверить this fiddle:

$(document).ready(function() { 
    $('form').submit(function (e) { 
     e.preventDefault(); 
     alert('vdsdsfsdf'); 
     //validate and submit. 
    }); 
} 
+0

И как мне получить доступ к myForm специально? Поскольку у меня есть более одной формы на моей странице – user1137313

+0

@ user1137313: вы всегда можете добавить 'id' к формам и вызвать как' $ ('# id'). Submit', если вы хотите уникальные проверки для каждого. – Harry

+0

Вы можете сделать это, как упоминает @Harry, или '$ (" form [name = 'myForm'] ")' – karthikr

1

Функция validu() должны быть доступны в HTML код. В этом случае он доступен только в функции jquery ready.

К сожалению, невозможно просто разместить его вне функции готовности в jsfiddle, чтобы он работал, поскольку jsfiddle сам поместил js-код в функцию загрузки окна. Таким образом, вы должны написать, как это так,

<script>function validu() 
{ 
    alert('vdsdsfsdf'); 
    return false; 
}</script> 
<form name="myForm" action="save-info.php" method="post" onsubmit="return(validu());"> 

<div class="container" style="width:700px; margin:0 auto;"> 
<fieldset> 
..... 

http://jsfiddle.net/QrYmh/52/

+1

Мы можем сделать это в скрипке без опции 'document.ready'. Вам просто нужно выбрать обертку в теле/​​голове из раздела фреймворков. – Harry

+0

ok да я вижу спасибо – melc

+0

+1 для рабочего кода. Однако я выбрал самый первый ответ, который сработал. Спасибо – user1137313

2

Чтобы иметь возможность ссылаться на function из атрибута on*, он должен быть определен в глобальном масштабе.

С validu(), который в настоящее время объявлен внутри другого function, атрибут onsubmit просто не может его достичь.

Чтобы validu() глобальный:

  1. Снимите $(document).ready(function() { }) окружающих function validu().

    [Side note] .ready() events aren't really necessary just for function declarations. They're most useful when you need to select elements from the document :

    function handleSubmit(event) { 
        // ... 
    } 
    
    $(document).ready(function() { 
        $('form[name="myForm"]').submit(handleSubmit); 
    }); 
    
  2. Изменить параметр JSFiddle из onLoad, который оборачивает ваш код в другом function, либо:

    • No wrap - in <head>
    • No wrap - in <body>

Или, как karthikr предложил, вы также может использовать unobtrusive JavaScript, а не атрибут onsubmit, поэтому привязка события и function могут находиться в одном и том же объеме.

$(document).ready(function() { 
    function validu() { 
     alert('vdsdsfsdf'); 
     return false; 
    } 

    $('form[name="myForm"]').submit(validu); // <---- 
}); 

Revised Fiddle.

+0

+1 мат, «глобальный охват», в котором я не был уверен, когда я отправил свой комментарий изначально :) – Harry

+0

+1 для вашего подробного ответа. Но первый ответ тоже работал, поэтому я должен был выбрать это как ответ. – user1137313

Смежные вопросы