1

我正在使用带有 gem 'jquery-mobile-rails' 的 Rails 4.0.0rc1。我正在尝试使用更改后的选择框的值在选择更改时隐藏和显示 DOM 元素。下面的代码在页面最初加载后工作。

一旦我点击 put-request-link jquery mobile 就会发送它的 AJAX 请求。该请求工作正常,更新数据库中的项目并且更新的项目正确显示在页面上。

AJAX 请求返回后,on_change 停止工作。这是代码:

<script type="text/javascript">
  function show_selected() {
    var selected_context_name = $('#context_description').val().replace(' ', '_');
    $('.' + selected_context_name).show();
  }

  function hide_unselected() {
    $('#context_description option').each(function(){
      $('.' + $(this).val().replace(' ', '_')).hide();
    });
  }

  $(document).on('pageinit', function(){
    alert('INIT HIDING');
    hide_unselected();
    show_selected();

    $('#context_description').bind('change', function(){
      alert('CLICKED ON SELECT');
      hide_unselected();
      show_selected();
    });
  });
</script>

我正在使用的 link_to_method:

link_to(
  item.description,
  polymorphic_url(item, item_class => { done: !item.done? }, format: :mobile),
  options.merge({
    method: :put,
    'data-role' => 'button'
  })
)

每次单击更新链接时,都会收到警报“初始化隐藏”。更新后,不再显示“CLICKED ON SELECT”消息。所以我认为可以肯定地说绑定不起作用。虽然我没有收到错误消息。

我试过了$('#context_description').change(function(){$('#context_description').on('change', function(){结果相同。所有方法都有效,但仅在第一次运行时有效。

如何正确绑定?

我也看到了委托,我试图将事件绑定到文档,但现在事情变得非常混乱。我什至不知道这是关于 Rails 还是 jquery mobile 了。

PS:每次更新后,控制器都会显式重定向回相同的路径(不使用 :back)。我检查了日志显示:'Started GET "/do.mobile"' 最初和 AJAX 返回后没有参数。

编辑:我意识到更新项目后选择输入具有不同的数据主题。我强迫它使用相同的,但这并没有改变任何东西。也许这激发了某人的想法......

编辑:更新表单后,将表单添加到 dom,使用用于更新的 url 作为操作参数,方法为“post”(不是“put”)。这是什么法术?

编辑:我发现了两个带有“data-role”=page 的完整元素,包括每个页面和整个内容的选择框。第一个页面元素设置为display: none;The one select in there 仍然有效。另一个没有,但是它们具有相同的ID。也许重定向在这里是错误的?

编辑:我尝试使用表单而不是 link_to 与 put 有和没有设置 remote: true 明确......什么都没学到......

4

1 回答 1

3

要将事件附加到动态插入的项目,请使用...

$(document).on('change', '.selector', function () { code });

要通过 id 获取动态项的值(在您的情况下)...

$.mobile.activePage.find('#id').val();
于 2013-06-16T21:12:59.063 回答