繁体   English   中英

Django表单提交按钮的onclick不会调用JavaScript函数

[英]Django form submit button's onclick does not call JavaScript function

我有一个Django表单,需要在提交表单之前进行一些客户端验证。 这是模板中的代码:

<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表单就可以了。

我不认为您的函数正在被调用。 我的直觉是您拼错了一些内容。 尝试将alert()放入函数中。

首先,请删除该“ javascript”伪协议前缀。 它在onclick属性中绝对没有位置。 它是为在hrefs中使用而发明的,但已被on *方法取代-整个要点是,您应该只使用javascript本身。

其次,为什么要麻烦变量呢? 为什么不只return validateComment()呢?

第三,您如何确定该函数“根本没有被调用”? 该函数似乎正在被调用,只是没有返回您认为的样子。 请发布该函数的代码,也许有人会发现问题所在。

直接在HTML中编写Javascript事件可能会在以后给您带来问题-而是尝试给表单一个ID,并在<head>部分中捕获Javascript的Submit事件

例如使用jQuery,并且表单具有id =“ my_form”:

<script type="text/javascript">

$(document).ready(function(){

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

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

})

})

</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM