Added submit button calls the earlier button's function itself

那年仲夏 提交于 2020-01-16 11:59:12

问题


I'm working on Rails 3 app. Here a view displays all the excel files uploaded by user. A button to execute all the checkbox selected files was already present with delete for each file separately. Now I'm supposed to add a 'delete' button to delete the selected files. I've added the button n modified the function called by this form jus to display "in execute" and "in delete" for now to check if the second 'delete' button is functioanal. But every time delete is clicked it prints "in execute" only in cmd. I guess the AJAX related code written in the view 'list' is the problem. Pls help!! Tell me why is it going to execute always? The related code is here:

PS: I hav used if params[:commit]="Delete" & if params[:delete_button] also in controller.rb to but didnt help

list.html.erb (the view that displays all files)

<% if @files.length > 0 %>
<h2 id='comments'>Uploaded Excel Files are as listed below for Edit/Delete/Execution</h2>
<div id='checkone' class='hide'>Please check atleast one excel file to execute</div>
    <% ajax_str = "new Ajax.Request('/account/execute_testcases', {asynchronous:true, evalScripts:true, onComplete:function(request){adjust_sidebar();Element.show('msg');Element.hide('waitid');Element.hide('disableexecuteid');Element.show('executeid');}, onLoading:function(request){Element.show('waitid');Element.hide('msg');Element.hide('executeid');Element.show('disableexecuteid');}, parameters:Form.serialize(this)}); return false;".html_safe %>
    <%= form_for 'file_names', :url => {:controller => 'account', :action => 'execute_testcases'},  :remote => true, :html => {:name => 'frmExecute', :onsubmit => ajax_str }, :id =>'execute_tc' do |f| %>
    <table>
        <% if @file_count > 1 && @error_in_all_files == false %>
        <tr>
        <td>
        <input type='checkbox' name='chkAll' onclick='checkAll();'>
        <span class='text'>Check All/Decheck All</span>
        </td>
        </tr>
        <% end %>
    </table>
    <table class='upload'>
    <% for a in @files %>
        <tr>

        <td>
        <% file_id = a.id.to_i %>
        <% if(@excel_errors[file_id].nil? || @excel_errors[file_id].empty?) && a.file_type.to_i != 1 %>
            <input type='checkbox' name = "excelfile[]" value="<%= a.excel_filename %>,<%= a.excel_filename_with_timestamp %>">
        <% else %>
            <input type='checkbox' name = "excelfile[]" value="<%= a.excel_filename %>,<%= a.excel_filename_with_timestamp %>" disabled=true>
        <% end %>
        <a href="open_excel_file/<%= a.id %>" title='Click to open' class='nodecoration'><%= a.excel_filename %></a>
        </td>
        <td>
        <%= link_to(image_tag("/images/b_edit.png", :border => 0, :title => 'Edit'), :action => 'upload_file', :file_id => a.id) %>
        </td>
        <td>
        <a href="delete/<%=a.id %>"><img src='/images/b_drop.png' border=0 title='Delete' onclick="return confirm('This will delete the related reports too. Are you sure to delete?');"></a>


        </td>
        <td>
            <% 
               if !@excel_errors[file_id].nil? && !@excel_errors[file_id].empty? 
                 @joined_excel_errors = @excel_errors[file_id].join(', ')
            %>     
                <a href='#' onclick="show_excel_errors(<%=file_id%>);" title="Error">Error</a>
            <% end %>
        </td>

        </tr>
        <tr id="excel_error_<%=file_id %>" style='display:none;'>
           <td colspan=4>
            <% if !@excel_errors[file_id].nil? && !@excel_errors[file_id].empty? %>
                <div class="padder">
                <% for error_value in @excel_errors[file_id] %>
                    <font color='maroon'><%= error_value %></font><br>
                <% end %>
                </div>
            <% end %>
            </td>
        </tr>
    <% end %>
        <tr><td>&nbsp;</td></tr>

        <tr>
        <td>
        <% if @error_in_all_files == false %>
        <span class='executebutton' id='executeid'>
            <%= f.submit "Execute", name: 'execute_button', :onclick =>"return checkSelected();" %>
        </span>
        <span class='deletebutton' id='deleteid'>
            <%= f.submit "Delete", name: 'delete_button', :onclick =>"return checkSelected();" %>
        </span>
        <% end %>
        <span id='disableexecuteid' class='executebutton' style='display:none;'>
        <input type='submit' value="Execute" disabled="disabled">
        </span>
        <span id='waitid' style="display:none;" class='text'>
            <br>Executing Test Cases...Please wait...<%= image_tag("/images/wait26trans.gif", :border => 0) %>
        </span>
        <span id='msg' style="display:none;" class='text'>
            <br><br>  Click here to <%= link_to 'View Test Results', {:controller => 'account', :action => 'recent_test_results'}, :class => 'brownlink' %>
        </span> 
        </td>
        </tr>
    </table>
    <span id='subject_list'>    
    </span>
    <% end %>
<% else %>
No test case sheets found! 
    <br><br>
    <%= link_to '>> Upload File', {:controller => 'account', :action => 'upload_file'}, :class => 'brownlink' %>
<% end %>
<% for i in 1..10 %>
    <div>&nbsp;</div>
<% end %>

controller.rb

  def execute_testcases
  if !params[:execute_button].nil? 
    puts "in execute"
    # file_names = []
    # originalfile_filewithtime = []
    # original_file_map = {}
    # originalfile_filewithtime = params[:excelfile]
    ......
    # SOME CODE HERE
    ......
    # render :update do |page|
      # page.replace_html :subject_list, :partial => 'show_output', :locals => {:new_file_map => @new_file_map}
      # page.visual_effect :highlight,  'subject_list', :duration => 2
      # flash[:display]=@execmsg
    #end
    # puts @execmsg

  elsif !params[:delete_button].nil? 
   puts "in delete"
  end

  end  

回答1:


I realised it had to do something with the Form.serialize(this) of AJAX which serialises everything. ie It calls the function of first button in the view irrespective of no of submit buttons present



来源:https://stackoverflow.com/questions/16188455/added-submit-button-calls-the-earlier-buttons-function-itself

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!