Jquery UI模式窗体示例按钮单击无法正常工作

时间:2011-10-05 12:13:25

标签: jquery asp.net jquery-ui

我正在使用JqueryUI模式表单,因为我是Jquery的新手,我认为第一部分是将演示模态表单集成到我正在处理的应用程序中,然后从那里开始。

我已经设法让其他更简单的示例工作,例如基本模态弹出框,但是当我尝试使用此模态窗体弹出时没有任何反应。

CSS / .js文件位于正确的位置并正确链接:

  <link type="text/css" href="../css/ui-lightness/jquery-ui-1.8.16.custom.css" rel="Stylesheet" />  
<script type="text/javascript" src="../js/jquery-1.6.4.min.js"></script>
<script type="text/javascript" src="../js/jquery-ui-1.8.16.custom.min.js"></script>

我提供了CSS并将其放在我自己的CSS文件中,我知道它正常工作,我可以看到应用于按钮的样式等。

CSS是:

/* Ticket Detail Popup */

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; 
}

我已将此演示中的代码完全包含http://jqueryui.com/demos/dialog/#modal-form,如下所示:

   <script>
      $(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. ui@jquery.com");
                  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>
   <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><!-- End demo -->

我做的最后一件事是在我想要的地方实现按钮:

<button id="create-user">Notify</button>

奇怪的是,即使我将示例完全复制到我的页面中,当我点击按钮时也没有发生任何事情,就像我点击按钮并使用我自己的代码一样没有任何反应。

有谁知道为什么会这样?由于我对Jquery和Web开发一般都很新,所以我真的没有看到这里会发生什么。

任何建议都会很棒 感谢

4 个答案:

答案 0 :(得分:1)

单击按钮时,尚未添加指定事件的部分。 你必须把它连接起来。

<script type="text/javascript">

  $(function() {

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

</script>

答案 1 :(得分:1)

听起来它可能无法正确加载JS。确保使用Firebug调试器(或类似的东西)正确加载这些文件。

此外,您如何包含实际的JS以使模式窗口打开?这部分:

$(foo).dialog('open')

它应该是:

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

答案 2 :(得分:1)

添加此项,如果不起作用,请检查所有z-index:

   open: function () {
        $(this).parent().appendTo("form");       
    }

答案 3 :(得分:0)

感谢帮助人员

经过一些实验后,似乎Form标签可能与页面中其他地方的另一种形式发生冲突,我删除了这些并且问题似乎消失了!