0

よし、この jQuery モーダル ダイアログを用意して、未登録ユーザーがユーザーのみのアクションにアクセスしようとした場合にサインアップするよう促します。更新後、ダイアログは正常に機能し、無期限に閉じたり開いたりできます...そのページで。ページが切り替わるとすぐに、ページが再度更新されない限り、モーダルは機能しません。

次のような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>

モーダル ボックスには、サインアップ フォームと、それを閉じるための通常の X があります。

私が考えているのは、ユーザーがページを切り替えたときにモーダルがすでに使用されているとjQueryが何らかの形で考えているのではないでしょうか? ヘルプやアイデアをお寄せいただきありがとうございます。

4

2 に答える 2

1

さて、ターボリンク (Rails 4.0) が何らかの形で jQuery コードに干渉し、実行をブロックしていたことが判明しました$(document).ready()。これにより、更新後にユーザーがナビゲートした後続のページで jQuery が機能しなくなりました。

解決策はこの宝石でした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 に答える