2016-10-03 2 views
0

Идея, что, когда пользователь заполняет информацию о бронировании, ему необходимо подтвердить свой номер телефона в том виде, в котором он получил код, и поместить его с остальной информацией о бронировании перед отправкой, поэтому у меня есть следующий видОтправить запрос AJAX без предоставления формы

<%= form_for(@booking) do |f| %> 
    <%= current_or_not_authenticated_user.email %> 
    <br> 
    <%= f.label :patient_id %> 
    <%= f.collection_select :patient_id, User.order(:created_at), :id, :email %> 
    <button type="button" class="btn btn-primary btn-md" data-toggle="modal" data-target="#patientModal"> 
     New Patient 
    </button> 
    <br> 
    <div class="form-group"> 
     <%= f.label :type %> 
     <%= f.select :booking_type, options_for_select([['Physiologist'], ['Psychiatrist'], ['Pediatrician']]) %> 
     <%= f.hidden_field :customer_id, :value => current_or_not_authenticated_user.id %> 
    </div> 
    <div class="form-group"> 
     <%= f.label :address %> 
     <%= f.collection_select :address_id, Address.where(user_id: current_or_not_authenticated_user.id), :id, :address1 %> 
     <button type="button" class="btn btn-primary btn-md" data-toggle="modal" data-target="#addressModal"> 
     New Address 
     </button> 
     <% if current_user && !current_user[:verified_by_phone_at] %> 
      <div class="form-group"> 
      <%= label_tag(:phone) %> 
      <%= text_field_tag(:phone) %> 
      <button id="smsBtn" type="button" class="btn btn-primary">Send SMS</button> 
      </div> 
      <div class="form-group"> 
      <%= label_tag :code %> 
      <%= text_field_tag :code %> 
      </div> 
     <% end %> 
     <%= f.submit "Confirm Booking" %> 
    </div> 
    <br> 
<% end %> 


    <script> 
     $(document).ready(function() { 
     $('#smsBtn').on('click', function() { 
      $.ajax({ 
      url: <%=phone_verification_index_path %>, 
      type: 'ajax', 
      data: $('#code').val() 
      }); 

     }); 

     }); 

    </script> 

щелчок на smsbtn должен идти к контроллеру phone_verification, который, в свою очередь вызова метода третьей партии, которые посылают смс пользователю, то пользователь заполнить свой код и нажмите на кнопку.

Моя проблема заключается в том, когда пользователь нажимает на smsbtn, форма @booking отправляется, и я не хочу формировать submit, если пользователь не нажимает кнопку «Подтверждение бронирования», единственный способ, которым работал мой jquery, был, когда я переехал оба поля телефона и smsbtn вне формы.

порядок полей важен, потому что я не хочу, чтобы пользователь сначала находил поле кода, а затем поле телефона под ним.

+0

Если вы хотите поделиться контроллер метод, как правило, я вытаскиваю его в помощник, а затем «другой» контроллер включает помощника. (посмотрите на метод helper() в ApplicationController) –

+0

@Medo, я не думаю, что название вашего вопроса совпадает с фактической проблемой. Вы просто хотите выполнить запрос AJAX без отправки формы. – Leito

+1

@Leito вы правы, я изменил название, чтобы отразить то, что я действительно хочу – Medo

ответ

1

Вы хотите, чтобы предотвратить #smsBtn от отправки формы, это может быть сделано разными способами, один из этого является вызов event.preventDefault() на обработчик щелчка:

$('#smsBtn').on('click', function (event) { 
    event.preventDefault() 
    // ... 
} 
+0

грустно это не сработало, оно все равно отправляет форму – Medo

+0

Трудно сказать, почему, не зная всей вашей установки. Знайте, что вы лучше знаете, что ищете, вы должны найти лучший ответ, повторив поиск: «Предоставить форму формы формы формы». Вы найдете этот и другие ответы, которые могут помочь и даже понять, почему это не работает для вас. Удачи – Leito

Смежные вопросы