代码之家  ›  专栏  ›  技术社区  ›  Tom van Enckevort

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

  •  1
  • Tom van Enckevort  · 技术社区  · 15 年前

    我有一个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>
    

    奇怪的是,如果我将onclick事件替换为

    javascript:alert('test');
    

    javascript:return false;
    

    JS代码执行得很好(在第二种情况下,它不会提交表单)。

    为什么它不执行我指定的函数? 只是为了确认我已经将脚本文件包含在HTML头中(包括嵌入模板中的JS代码并没有什么区别),如果我不使用Django表单,而是使用普通HTML表单,它就可以正常工作。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Dan.StackOverflow    15 年前

    我认为你的函数没有被调用。我的直觉是你拼错了什么。尝试在函数中添加一个alert()。

        2
  •  0
  •   Daniel Roseman    15 年前

    其次,你为什么要为这个变量烦恼?为什么不 return validateComment() ?

    第三,您如何确定函数“根本没有被调用”?似乎函数正在被调用,它只是没有返回您认为它是什么。请发布函数的代码,也许有人会发现错误。

        3
  •  0
  •   joeformd    15 年前

    直接在HTML中编写Javascript事件可能会在以后给您带来问题—请尝试为表单提供一个id,并在 <head> 部分

    例如,使用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>