提交按钮仅用于验证 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' %> <%= f.submit 'Cancel', :id=>'docNewCancelButton', :type=>'reset' %>
<% end %>
<br>
<hr>
<br>
<%= link_to 'Back', questions_path %>
question.js 文件中存在 JavaScript 代码
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
最佳答案
看起来好像您正在使用 javascript 验证创建 ruby on Rails 表单。虽然您可以做到这一点,但我建议您从基本的 MVC 结构开始。我强烈建议您学习一些基础知识,以帮助您了解这一点。 http://guides.rails.info/是一个很好的起点。我希望在我开始的时候它就在那里,这样我就省去了很多痛苦:)
您将希望将验证移至模型中。
在app/models/question.rb
class Question < ActiveRecord::Base
validates_presence_of :question
end
更多验证选项here .
那么您希望有一个 Controller 来响应您的创建事件。在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
有一些插件可以缩短其中的一些时间,但我建议您先做一些事情。它可以帮助您确定方向。祝你好运!
关于javascript - 提交按钮不提交表单,但检查验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128229/