Jquery-Mobile:重定向后未执行“更改”绑定(rails 4)

Jquery-Mobile:重定向后未执行“更改”绑定(rails 4),jquery,jquery-mobile,ruby-on-rails-4,Jquery,Jquery Mobile,Ruby On Rails 4,我将Rails 4.0.0rc1与gem“jquery移动Rails”一起使用。 我试图在选择更改中隐藏和显示DOM元素,使用更改的选择框的值。下面的代码在最初加载页面后工作 单击put请求链接后,jquery mobile将发送其AJAX请求。 请求工作正常,更新数据库中的一个项目,更新后的项目在页面上正确显示 AJAX请求返回后,on_更改停止工作。代码如下: <script type="text/javascript"> function show_selected() {

我将Rails 4.0.0rc1与gem“jquery移动Rails”一起使用。 我试图在选择更改中隐藏和显示DOM元素,使用更改的选择框的值。下面的代码在最初加载页面后工作

单击put请求链接后,jquery mobile将发送其AJAX请求。 请求工作正常,更新数据库中的一个项目,更新后的项目在页面上正确显示

AJAX请求返回后,on_更改停止工作。代码如下:

<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>
每次单击更新链接时,我都会收到“INIT HIDING”警报。更新后,“单击选择”消息不再显示。因此,我认为可以肯定地说,绑定不起作用。但我没有收到错误消息

我尝试了$'context\u description'.changefunction{和$'context\u description'.on'change',function{的结果相同。所有方法都有效,但仅在第一次运行时有效

我怎样才能把装订好

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

附言: 控制器重定向回同一路径,但没有使用:每次更新后返回。我检查了日志是否显示:“Started GET/do.mobile”,以及AJAX返回后是否没有参数

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

编辑: 在更新表单后,将用于更新的url作为操作参数添加到dom中,方法为“post”而不是“put”。这是什么魔法

编辑:我发现了两个完整的元素,data role=page,每个元素和页面的全部内容都有一个选择框。第一个页面元素被设置为显示:none;其中一个select仍然有效。另一个没有,但是它们具有相同的id。这里的重定向可能是错误的


编辑:我尝试使用一个表单,而不是链接到带有和不带remote:true的put,显式设置为…未学到任何东西…

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

$(document).on('change', '.selector', function () { code });
要在您的案例中按id获取动态项的值

$.mobile.activePage.find('#id').val();

上下文是动态添加的吗?按钮从中获取其id。要隐藏的项也从基础模型中获取其类。因此:是的,它们是动态创建的。不过我检查了dom。分配的css选择器对于.change函数的调用失败和成功都是相同的。确定,然后尝试$document.on'change','context',functionThank!现在它拾取了更改。但是它没有正确执行隐藏,因为它拾取了context\u description select的第一个实例的值。有没有办法通过\u id找到\u并使用最后一个?我知道您应该只有一个id,但不知怎的,jquery mobile提供了整个页面的副本…对不起我不理解您的上一条评论:/find what by id?与上一页中的id相同?与上面的代码相同,但选择器$.mobile.activePage.prev'[data role=page]'。查找'context'.val;,以获取值。
$.mobile.activePage.find('#id').val();