0

以下代码在我提交包含有效内容的表单时起作用。但是当我提交包含无效内容的表单时,它会验证并显示出现错误并重新加载页面。但是,表单不会被提交。 你能帮我解决吗? 谢谢。提交按钮无法正常工作,但会检查验证

查看代码

<h1 class="hdr1">Ask question</h1> 

<%= link_to Profile.find(session[:user_id]).firstname,{},{:id=>"person"} %> 
<% form_for(@question) do |f| %> 
    <%= f.error_messages %> 

<br> 

<table id="newQuesTable" width="100%" cellpadding="5" border="1"> 
<tr> 
    <td width="25%"><label>Your Question </label> - </td> 
    <td><%= f.text_area :content, :rows=>5, :cols=>35, :maxlength=>500, :id=>"newQuesTxtA"%> </td> 

<td width="30%"><i><label id="newQuesLabel" style="color:red;background-color:yellow;visibility:visible;"></label></i></td> 

</tr> 


<tr> 
    <td width="25%"><%= f.label :tags %> -</td> 
    <td><%= f.text_field :tags, :maxlength=>48, :id=>"tagsNewQuesTxt" %></td> 
    <td width="30%"><i><label id="nquesTagsLabel" style="color:red;background-color:yellow;visibility:visible;"></label></i></td> 
</tr> 


<tr> 
    <td>Question Scope -</td> 
    <!--the open id for the hierarchy comes here--> 
    <!-- the select box comes here --> 
    <td> <%= f.text_field :ID_string %></td> 
</tr> 

</table> 

<br> 
    <%= f.submit 'Post Question' %> &nbsp; <%= f.submit 'Cancel', :id=>'docNewCancelButton', :type=>'reset' %> 

<% end %> 

<br> 
<hr> 
<br>  
<%= link_to 'Back', questions_path %> 

Javscript存在于questions.js代码文件

Event.observe(window, 'load', function(){ 
    $('new_question').observe('submit', submitQuestionCreate); 
    $('quesNewCancelButton').onClick('resetquesform') 
}); 

function resetquesform() 
{ 
    event.preventDefault(); 
    reset($('new_question')); 
    return; 
} 

function submitQuestionCreate(event) 
{ 

    //event.preventDefault(); 

    var quesfield = $('newQuesTxtA'); 
    var tagsfield = $('tagsNewQuesTxt'); 
    var labelnques = $('newQuesLabel'); 
    var labelnquestags = $('nquesTagsLabel'); 

    if((quesfield.value == "") && (tagsfield.value == "")) 
    { 
     event.preventDefault(); 
     //alert('Question and Tags field cannot be empty'); 
     labelnques.innerHTML = 'Question field cannot be empty!'; 
     labelnquestags.innerHTML = 'Please enter (some) relevant tags...'; 
     probchk = true; 
     return; 
    } 

    if((quesfield.value == "") || (tagsfield.value == "")) 
    { 
     event.preventDefault(); 
     if (quesfield.value == "") 
     { 
      labelnques.innerHTML = 'Question field cannot be empty!'; 
      labelnquestags.innerHTML = ""; 
      probchk = true; 
      return; 
     } 

     if (tagsfield.value == "") 
     { 
      labelnquestags.innerHTML = 'Please enter (some) relevant tags...'; 
      labelnques.innerHTML = ""; 
      probchk = true; 


      if (quesfield.value.length > 500) 
      { 
       labelnques.innerHTML = 'Question too long (should be 500 characters or less)'; 
       probchk = true; 
      } 

      return; 
     } 

    } 


    if (quesfield.value.length > 500) 
    { 
     event.preventDefault(); 
     labelnques.innerHTML = 'Question too long (should be 500 characters or less)'; 
     probchk = true; 
     return; 
    } 

} 

控制器代码

def show 
     @question = Question.find(params[:id]) 
     if !session[:user_id].nil? 
      #@owner = Document.is_owner(params[:id],session[:user_id]) 
      @fav_count = FavouriteQuestion.count(:all,:conditions=>["question_id = ? AND profile_id = 
         ?",@question.id,session[:user_id]]) 
      if FavouriteQuestion.count(:all,:conditions=>["question_id = ? AND profile_id = 
         ?",@question.id,session[:user_id]]) > 0 
       @fav_status = 1 
      else 
       @fav_status = 0 
      end 
     else 
      @owner = Document.is_owner(params[:id],nil) 
      @fav_status = 0 
     end 
     respond_to do |format| 
      format.html # show.html.erb 
      format.xml { render :xml => @question } 
     end 
    end 

    def new 
     @question = Question.new 
     if !session[:user_id].nil? 
      @question.profile_id = session[:user_id] 
     end 
     respond_to do |format| 
      format.html # new.html.erb 
      format.xml { render :xml => @question } 
     end 
    end 
+0

是不是所需的行为?您不希望提交表单,因为它具有无效元素 – Jimmy 2010-06-27 20:07:18

+0

不。实际上,当无效表单再次显示给用户时,即使提供有效输入,也不会提交 – felix 2010-06-27 20:29:47

回答

0

如果您不希望表单提交(例如,如果出现错误),请使用event.preventDefault()event.stopPropogation()return false。希望有所帮助。

0

由于致命错误,您的代码中可能会出现异常。由于目前没有try catch语句,因此此异常未被捕获,请放弃event.preventDefault()并提交表单。

我会创建这个try catch语句并在其中添加Event.stop(event),以便在出现异常时不提交表单。