2011-03-13 4 views
2

jQueryで最初のダイアログとAJAXが動作し、最終的にはすごくうまくいっています - ダイアログにはいくつかのボタンがあり、キャンセル、保存、サーバー。問題は、ダイアログボックスをモーダル(ウィンドウの他の部分をグレー表示)にした後、IEでスクロールバーが表示され、ページが連続して連続して移動することがあります。これは、ダイアログが開かれるたびに発生します(最初は開かないように設定されていますが、毎回ではありません)。 JSループをどこにも持っていないので、これを行うコードの一部を考えることはできません。これについてのグーグルリングは役に立たなかった。それはIEの対jQueryのクールクのようだが、任意のアイデアですか?jQueryダイアログを開くとIEが連続的に長くなります

編集> お返事ありがとうございます。 ここにいくつかのコードがあります!これは同じことをする私の作業デモであり、jquery UIモーダルダイアログの例はhttp://jqueryui.com/demos/dialog/#modal-formであり、jquerui.comの例でそのように動作するIEを取得できませんでした。実際に私はそれを上って行き、同じ破壊コード、たとえ "破壊"さえします。違いは何ですか?

<style type="text/css"> 
    body { font-size: 62.5%; padding: 10px 50px;} 
    label, input { display:block; } 
    input.text { margin-bottom:12px; width:95%; padding: .4em; } 
    fieldset { padding:0; border:0; margin-top:25px; } 
    h1 { font-size: 1.2em; margin: .6em 0; } 
    div#users-contain { width: 350px; margin: 20px 0; } 
    div#users-contain table { margin: 1em 0; border-collapse: collapse; width: 100%; } 
    div#users-contain table td, div#users-contain table th { border: 1px solid #eee; padding: .6em 10px; text-align: left; } 
    .ui-dialog .ui-state-error { padding: .3em; } 
    .validateTips { border: 1px solid transparent; padding: 0.3em; } 
</style> 
<script language="javascript" type="text/javascript"> 
$(function() { 
     // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore! 
     $("#dialog:ui-dialog").dialog("destroy"); 

     var name = $("#name"), 
       email = $("#email"), 
       password = $("#password"), 
       allFields = $([]).add(name).add(email).add(password), 
       tips = $(".validateTips"); 

     function updateTips(t) { 
       tips 
         .text(t) 
         .addClass("ui-state-highlight"); 
       setTimeout(function() { 
         tips.removeClass("ui-state-highlight", 1500); 
       }, 500); 
     } 

     function checkLength(o, n, min, max) { 
       if (o.val().length > max || o.val().length < min) { 
         o.addClass("ui-state-error"); 
         updateTips("Length of " + n + " must be between " + 
           min + " and " + max + "."); 
         return false; 
       } else { 
         return true; 
       } 
     } 

     function checkRegexp(o, regexp, n) { 
       if (!(regexp.test(o.val()))) { 
         o.addClass("ui-state-error"); 
         updateTips(n); 
         return false; 
       } else { 
         return true; 
       } 
     } 

     $("#dialog-form").dialog({ 
       autoOpen: false, 
       height: 300, 
       width: 350, 
       modal: true, 
       buttons: { 
         "Create an account": function() { 
           var bValid = true; 
           allFields.removeClass("ui-state-error"); 

           bValid = bValid && checkLength(name, "username", 3, 16); 
           bValid = bValid && checkLength(email, "email", 6, 80); 
           bValid = bValid && checkLength(password, "password", 5, 16); 

           bValid = bValid && checkRegexp(name, /^[a-z]([0-9a-z_])+$/i, "Username may consist of a-z, 0-9, underscores, begin with a letter."); 
           // From jquery.validate.js (by joern), contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ 
           bValid = bValid && checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, "eg. [email protected]"); 
           bValid = bValid && checkRegexp(password, /^([0-9a-zA-Z])+$/, "Password field only allow : a-z 0-9"); 

           if (bValid) { 
             $("#users tbody").append("<tr>" + 
               "<td>" + name.val() + "</td>" + 
               "<td>" + email.val() + "</td>" + 
               "<td>" + password.val() + "</td>" + 
             "</tr>"); 
             $(this).dialog("close"); 
           } 
         }, 
         Cancel: function() { 
           $(this).dialog("close"); 
         } 
       }, 
       close: function() { 
         allFields.val("").removeClass("ui-state-error"); 
       } 
     }); 

     $("#create-user") 
       .button() 
       .click(function() { 
         $("#dialog-form").dialog("open"); 
       }); 
}); 
</script> 

<div class="demo"> 

    <div id="dialog-form" title="Create new user"> 
     <p class="validateTips">All form fields are required.</p> 

     <form method="post" id="new_user_form" name="new_user_form" action=""> 
     <fieldset> 
      <label for="name">Name</label> 
      <input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" /> 
      <label for="email">Email</label> 
      <input type="text" name="email" id="email" value="" class="text ui-widget-content ui-corner-all" /> 
      <label for="password">Password</label> 
      <input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" /> 
     </fieldset> 
     </form> 
    </div> 


    <div id="users-contain" class="ui-widget"> 
     <h1>Existing Users:</h1> 
     <table id="users" class="ui-widget ui-widget-content"> 
      <thead> 
       <tr class="ui-widget-header "> 
        <th>Name</th> 
        <th>Email</th> 
        <th>Password</th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>John Doe</td> 
        <td>[email protected]</td> 
        <td>johndoe1</td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
    <button id="create-user">Create new user</button> 

</div><!-- End demo --> 
+0

コードが必要です。実際の例です。 – Hogan

+1

スクロールバーの表示はおそらく問題とは無関係ですが、私は常に$( 'body')を呼び出しますcss( 'overflow'、 'hidden'); 'モーダルダイアログを開き、' $( 'body' ).css( 'overflow'、 'auto'); '完了したらリセットする - そういう形でもっと良く見える。 – danlefree

答えて

0

さて、私はいつものjQuery UI CSSを "ハッキング" であることを解決します。このような 何か:

.ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%!important; height: 100%!important; } 
1

ああ、私は(マイルストーン2リリース)のjQuery UIの1.9平方メートルを使用していたし、現在の公式リリースは1.8.10です。私はもう1つをダウンロードして試しましたが、もはやそれをしませんでした。私は、開発中のバグのバグを報告するために私がオフになっていると思います。私はツールチップのために1.9が必要です。

+0

バグチケットはこちら - http://bugs.jqueryui.com/ticket/7113 – mikato

関連する問題