2009-11-07 2 views
1

У меня есть форма Django, которая должна выполнить некоторую проверку на стороне клиента перед отправкой формы. Это код в шаблоне:Django form submit button onclick не вызывает функцию JavaScript

<form action="/{{ blog_entry.id }}/addComment/" method="post"> 
{{ commentForm.name.label_tag }} 
{{ commentForm.name }} 
<span id="spanNameReq" style="color:Red; display:none;">Required</span> 
<br />  
{{ commentForm.email.label_tag }} 
{{ commentForm.email }} 
<span id="spanEmailReq" style="color:Red; display:none;">Required</span> 
<span id="spanEmailInvalid" style="color:Red; display:none;">Invalid e-mail address</span> 
<br /> 
{{ commentForm.website.label_tag }} 
{{ commentForm.website }} 
<span id="spanWebsiteInvalid" style="color:Red; display:none;">Invalid URL</span> 
<br />  
{{ commentForm.comment.label_tag }} 
<span id="spanCommentReq" style="color:Red; display:none;">Required</span> 
<br /> 
{{ commentForm.comment }} 
<br /> 
<input type="submit" value="Add comment" onclick="javascript:var ret = validateComment(); return ret;" /> 
</form> 

Но проблема в том, что validateComment не дозвонились вообще, и форма получает представлен сразу. Как ни странно, если я заменю событие OnClick с

javascript:alert('test'); 

или

javascript:return false; 

, что JS код запускается на выполнение прекрасно (и во втором случае она не будет представлять форму).

Почему он не выполняет указанную функцию? Просто, чтобы подтвердить, что я включил файл сценария в голову HTML (включая JS-код, встроенный в шаблон, не имеет значения), и если я не использую Django-форму, а обычную HTML-форму, она отлично работает ,

+1

Я не могу сказать, почему это не работает, но вы должны рассмотреть возможность использования события onsubmit формы, а не 'onclick' на кнопке submit. Таким образом, он будет работать, если вы нажмете enter, чтобы отправить форму, как только вы ее заработаете. – nlogax

+0

@nlogax: да, я понял, что, когда joeformd опубликовал подобное предложение ниже. К сожалению, это еще не решило мою проблему ... –

ответ

1

Я не думаю, что ваша функция называется. Я подозреваю, что у тебя что-то написано неправильно. Попробуйте включить функцию alert() в свою функцию.

+0

Дэн, я уже пробовал это. У меня двойная и тройная проверка орфографии. Как уже упоминалось, если я использую «нормальную» форму HTML, а не форму Django, она отлично работает. –

+0

измените свой вопрос, чтобы включить функцию html и javascript, которая выполняет функцию alert(), которая включает в себя форму как результат из шаблона, а затем «нормальную» форму html. Просто чтобы мы могли лучше выглядеть. –

+0

Оказывается, в функциях JavaScript была ошибка синтаксиса. –

0

Во-первых, пожалуйста, снимите префикс псевдопротокола «javascript». У него абсолютно нет места в атрибуте onclick. Он был изобретен для использования в hrefs, но был заменен на on * методами - весь смысл в том, что вы должны просто использовать сам javascript.

Во-вторых, почему вы беспокоитесь об этой переменной? Почему бы не просто return validateComment()?

В-третьих, как вы определяете, что функция «не называется вообще»? Кажется вероятным, что функция называется, она просто не возвращает то, что вы думаете. Пожалуйста, напишите код функции, и, возможно, кто-то определит, что случилось.

+0

Спасибо за комментарии. Да, вы правы в отношении префикса и переменной, я просто вставляю их, потому что я пытаюсь по-другому разобраться, будет ли это работать. Я знаю, что функция не вызывается, потому что если единственная строка в validateComment - «return false»; он не остановит подачу формы. –

0

событий Написание Javascript непосредственно в HTML может дать вам проблемы позже - вместо того, чтобы попытаться дать форме идентификатор, и ловя отправить событие из Javascript в <head> разделе

, например, с помощью JQuery, и форма имеет идентификатор = "my_form":

<script type="text/javascript"> 

$(document).ready(function(){ 

$('#my_form').submit(function(){ 

    if ([test here]){ 
     return true; 
    } else { 
     return false; //prevents submission 
    } 

}) 

}) 

</script> 
+0

Спасибо за предложение, но с помощью формы отправить событие не имеет значения в этом случае. Это не будет проходить через эту функцию. –

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