我正在使用带有 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 明确......什么都没学到......