Использование javascript .click внутри частичных рельсов

У меня есть функция щелчка javascript, которая вызывается каждый раз, когда нажимается мое текстовое поле, однако по какой-то причине она работает только в том случае, если текстовое поле находится внутри главной страницы, когда я перемещаю текстовое поле в частичный я отображаю ничего не происходит, когда я нажимаю на него . Кто-нибудь знает, как заставить событие клика работать внутри партиала?

Мой файл users.js.coffee

$ ->
  $("form[data-update-target]").live "ajax:success", (evt, data) ->
    target = $(this).data("update-target")
  $("#" + target).html data

  $("input.submit").click ->
    $(this).parent().submit()
    true

  $("#datepicker").click ->
    alert "hello world"

Новая страница для пользователей

<%= form_tag({:controller => 'users', :action => 'preview'}, :remote => true, :'data-update-target' => 'update-container') do %>
  <%= radio_button_tag(:page_type, 'event', false, :class => 'submit') %>
  <%= label_tag(:page_type, "Event") %>
  <br/>
<% end %>
<div id="update-container">
</div>

Пользовательский контроллер

def preview
  if params[:page_type] == "event"
    @event = Event.new
    render :partial => 'event', :object => @event
  end
end

Партиал событий называется _event.html.erb

<%= form_for(@event) do |f| %>
  <div class="field">
    <%= f.label :name %>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %>
    <%= f.text_area :description %>
  </div>
  <div class="field">
    <%= f.label :start %>
    <input id="datepicker" type="text" value="" name="event_start">
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

сгенерированный html

<body>
<p id="notice"></p>
<p id="alert"></p>
  <h1>New page</h1>

<form accept-charset="UTF-8" action="/users/preview" data-remote="true" data-update-target="update-container" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="iIodOQohxJgk1P5ZmFrbgw4W/h4cq45LBxGN3xjyREk=" /></div>

<input class="submit" id="page_type_event" name="page_type" type="radio" value="event" />
<label for="page_type">Event</label>
<br/>
</form><div id="update-container">
</div>
<input id="datepicker" type="text" value="" name="event_start">

<a href="/users">Back</a>
</body>

person rails_developer    schedule 06.11.2012    source источник
comment
Можете ли вы показать сгенерированные js и html?   -  person Serabe    schedule 07.11.2012


Ответы (1)


Быстрый ответ: нет ввода с классом отправки. Вы либо хотите добавить класс отправки в соответствующий элемент ввода, либо изменить селектор на что-то вроде $('input[type=submit]')

С другой стороны, если я использую класс только для поведения js, я обычно добавляю js- к имени, чтобы дизайнер знал, что он не должен его удалять (или использовать для стилизации).

Но если проблема заключается в том, что средство выбора даты не отображается при загрузке страницы (например, добавлено позже с помощью javascript), вам нужно объявить обратный вызов по-другому.

Выберите родителя средства выбора даты, который присутствует с момента первого отображения страницы (если его нет, вы можете использовать document). В данном случае родителем является div#update-container:

$("#update_-container").on 'click', '#datepicker', (evt) ->
    # code here....

Дополнительные сведения см. в официальной документации по jQuery.

person Serabe    schedule 06.11.2012
comment
Извините, я не уверен в том, что вы имеете в виду, однако я предполагаю, что вы имеете в виду $(input.submit), который на самом деле работает нормально. Моя проблема заключается в функции ниже той, где $(datepicker).click отказывается выполняться - person rails_developer; 07.11.2012
comment
Можете ли вы вставить сгенерированный HTML, пожалуйста? - person Serabe; 07.11.2012
comment
Я обновил вопрос сгенерированным html, однако это интересно, поскольку html для частичного никогда не генерируется или, по крайней мере, не отображается в источнике при его рендеринге, и я думаю, почему .click не работает, но я не уверен, как починить это. Думаю, это либо связано с функцией рендеринга в рельсах, либо с ajax. - person rails_developer; 07.11.2012
comment
Если оно не отображается при загрузке страницы, событие не получит обратный вызов. - person Serabe; 07.11.2012
comment
как бы мне исправить это, чтобы он отображался правильно? Поскольку я могу видеть частичное, а также нажимать кнопку отправки/взаимодействовать с частичным, и оно работает нормально, за исключением того факта, что оно на самом деле не существует в исходном коде. - person rails_developer; 07.11.2012
comment
Можете ли вы обновить вопрос о том, как работает ваша форма? Прямо сейчас я предполагаю, что частичное отображается при отправке формы, но я не уверен в этом. - person Serabe; 07.11.2012
comment
когда пользователь выбирает переключатель, частичное отображается в div-контейнере обновления. Оттуда вы можете ввести информацию внутри партиала и нажать кнопку отправки внутри, чтобы отправить данные. - person rails_developer; 07.11.2012
comment
спасибо, исправление работает отлично. К сожалению, требуется немного времени для загрузки, прежде чем оно появится, но это, вероятно, другая проблема. Спасибо - person rails_developer; 07.11.2012