0

Le code suivant fonctionne lorsque je soumets le formulaire avec un contenu valide. Mais lorsque je soumets le formulaire avec un contenu invalide, il valide et montre qu'il y a une erreur et recharge la page. Mais alors le formulaire n'est pas soumis. Pouvez-vous m'aider s'il vous plaît avec ceci? Merci.Le bouton Soumettre ne fonctionne pas mais vérifie les validations

Afficher le code

<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 %> 

Code javscript présent dans questions.js fichier

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; 
    } 

} 

code contrôleur

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

Ce comportement n'est-il pas souhaité? Vous ne voulez pas envoyer votre formulaire car il contient des éléments non valides. – Jimmy

+0

Non. En fait, lorsque le formulaire invalide est à nouveau affiché à l'utilisateur, il n'est pas soumis même si une entrée valide est fournie – felix

Répondre

0

Si vous ne souhaitez pas que le formulaire soit soumis (par exemple, s'il y a eu une erreur), utilisez event.preventDefault() et event.stopPropogation() ou return false. J'espère que cela pourra aider.

0

Il existe peut-être une exception quelque part dans votre code en raison d'une erreur fatale. Parce qu'il n'y a pas d'instruction try catch pour le moment, cette exception est non interceptée, déposez votre event.preventDefault() et soumettez le formulaire quand même.

Je créerais cette instruction try catch et j'ajouterais Event.stop (event) pour qu'elle ne soumette pas le formulaire en cas d'exception.

Questions connexes