2010-06-27 202 views
1

提交按鈕僅用於在question.js文件中驗證javascript,但它不執行提交表單本身的基本功能!非常感謝您的幫助。提交按鈕不提交表單,但檢查驗證

`包含表單元件的Ruby頁代碼

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

的Javascript存在於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 

回答

0

它看起來好像你正在做一個,紅寶石的軌道形式與JavaScript驗證。雖然你可以這樣做,但我會建議從一個基本的MVC結構開始。我強烈建議通過一些基本知識,讓你知道這一點。 http://guides.rails.info/是一個很好的開始。我希望它一直在那裏,當我開始時,它會爲我節省很多痛苦:)

你將要移動你的驗證模型。

app/models/question.rb

class Question < ActiveRecord::Base 
    validates_presence_of :question 
end 

更多烤驗證選項here

然後你想有一個控制器來響應你的創建事件。在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 

然後你config/routes.rb

map.resources :questions 

表單應類似於你有什麼:

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

閃光燈粗,我沒有用它在一會兒。我使用message_block插件。您還可以閱讀更多關於閃光燈工作原理的文章here

有一些插件可以縮短其中的一些,但我建議您先切割一下我的牙齒。它可以幫助你獲得導向。祝你好運!