2010-06-27 17 views
1

Le bouton Soumettre ne fonctionne que pour valider le javascript dans le fichier question.js, mais ne remplit pas la fonction de base qui consiste à soumettre le formulaire lui-même! Votre aide est très appréciée.Le bouton Soumettre ne soumet pas le formulaire mais vérifie les validations

`code de page Ruby contenant l'élément de forme

<script type="text/javascript"> 
    loadScript("/javascripts/questions.js",function() {}); 
</script> 

<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 Javascript présent dans le fichier question.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; 
    } 

} 

***question controller file*** 


    # GET /questions/1 
     # GET /questions/1.xml 
     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 

     # GET /questions/new 
     # GET /questions/new.xml 
     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 

Répondre

0

Il semble que vous fassiez un formulaire ruby ​​on rails avec des validations javascript. Alors que vous pouvez le faire, je recommande de commencer avec une structure MVC de base. Je recommande fortement de passer par quelques bases qui vous orienteront vers cela. http://guides.rails.info/ est un bon endroit pour commencer. J'aurais aimé qu'il soit là quand j'ai commencé, ça m'aurait sauvé beaucoup de peine :)

Le vous voudrez déplacer vos validations dans le modèle.

dans app/models/question.rb

class Question < ActiveRecord::Base 
    validates_presence_of :question 
end 

plus cuit dans les options de validation here.

Ensuite, vous voulez avoir un contrôleur pour répondre à vos événements de création. en app/controller/question_controller.rb:

class QuestionsController < ApplicationController 
    def new 
    @question = Question.new 
    end 

    def create 
    @question = Question.new(params[:question]) 

    if @question.save 
     flash[:confirm] = "You have asked a question" 
     redirect_to questions_path 
    else 
     flash[:error] = @question.errors.full_messages.join(",") 
     render :action => :new 
    end 
    end 
end 

Et puis votre config/routes.rb

map.resources :questions 

Votre formulaire doit ressembler à ce que vous avez:

<%= flash[:error] %> 
<% form_for(@question) do |f| %> 
    <%= f.text_field :content ... 
<% end %> 

le flash est brut, je n'ai pas utilisé dans quelque temps. J'utilise le plugin message_block. Vous pouvez également en savoir plus sur le fonctionnement du flash here

Il existe des plugins pour raccourcir certaines de ces fonctions, mais je recommande de vous couper les dents en commençant par cela. Cela vous aide à vous orienter. Bonne chance!