2010-06-27 149 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

有一些插件可以缩短其中的一些,但我建议您先切割一下我的牙齿。它可以帮助你获得导向。祝你好运!