Кнопка «Отправить» не работает, но проверяет проверки - PullRequest
0 голосов
/ 27 июня 2010

Следующий код работает, когда я отправляю форму с правильным содержанием. Но когда я отправляю форму с недопустимым содержимым, она проверяет и показывает, что произошла ошибка, и перезагружает страницу. Но тогда форма не будет отправлена. Можете ли вы помочь мне с этим? Спасибо.

Посмотреть код

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

Javscript код присутствует в файле questions.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;
    }

}

Код контроллера

 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

Ответы [ 2 ]

0 голосов
/ 05 июля 2010

Возможно, в вашем коде есть исключение из-за фатальной ошибки. Поскольку в данный момент нет оператора try catch, это исключение не обработано, удалите ваш event.preventDefault () и в любом случае отправьте форму.

Я бы создал этот оператор try catch и добавил бы в него Event.stop (событие), чтобы он не отправлял форму в случае исключения.

0 голосов
/ 28 июня 2010

Если вы не хотите отправлять форму (например, если произошла ошибка), используйте event.preventDefault() и event.stopPropogation(), или просто return false.Надеюсь, это поможет.

...