0

好的,所以我有这个 jQuery 模式对话框来提醒非注册用户在他们尝试访问仅限用户的操作时进行注册。刷新后,对话框工作正常,可以无限期地关闭和打开......在那个页面上。切换页面后,除非再次刷新页面,否则模式将不起作用。

我将模态绑定到rails if else语句,例如

<% if signed_in? %>
  <a href="User only page">
<% else %>
  <div class="modalstart">
<& end %>

但是,我在没有声明的情况下尝试了它,问题仍然存在,所以我猜这是 jQuery 问题。

这是我的模态对话框代码代码:

$(window).bind("load", function() {
$(document).ready(function() {
  $('#modalresult').dialog({ width: 550, height: 300, autoOpen: false, modal: true,   
                                                               resizable: false });

  $( ".modalstart" ).click(function() {
    $( "#modalresult" ).dialog( "open" );
    return false;
   });
  })
});

并且对话框所绑定的 div 设置为在调用之前不显示,如果它有任何后果:

<div id="modalresult" style="display:none"></div>

模态框有一个注册表单和 requular X 来关闭它。

我在想,当用户切换页面时,会不会是 jQuery 以某种方式认为模式已经在使用?提前感谢您的任何帮助或想法。

4

2 回答 2

1

好吧,事实证明turbolinks(rails 4.0)以某种方式干扰了jQuery代码,阻止$(document).ready()了执行。这导致 jQuery 无法在用户刷新后导航的任何后续页面上工作。

解决方案是这个 gem https://github.com/kossnocorp/jquery.turbolinks

我把这个留给有同样问题的其他人以节省时间。

非常感谢所有试图提供帮助的人。我非常感激。

于 2013-09-06T20:33:18.547 回答
0

看起来你坚持使用默认的 jQueryUI 行为(例如,你正在关闭带有内置“x”的对话框),我认为只需清理你的 javascript 就可以正常工作。我认为这$(window).bind("load", function() {肯定会引起一些问题。

JS

$(function() {
    $('#modalresult').dialog({
        width: 550, 
        height: 300, 
        autoOpen: false, 
        modal: true,
        resizable: false 
    });

    $('.modalstart').click(function() {
        $('#modalresult').dialog('open');
    });
});

您不必进行任何其他事件绑定,jQuery UI 将“正常工作”。

虽然它不能模拟你的确切情况,但我在这里创建了一个简单的小提琴:http: //jsfiddle.net/chucknelson/WVmx6/

window.bind 打破了它,我认为您的具体问题可能与此有关。

于 2013-09-06T00:02:30.947 回答