2011-08-16 25 views
1

我測試使用Jquery ToolsjQuery的工具阿賈克斯登錄使用ColdFusion,問題取消模態

這裏是我的測試頁的AJAX模式登錄。

<cfparam name="session.auth.isLoggedIn" default="false"> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html> 

    <head> 
     <title>jQuery modal logon test</title> 
     <!-- include the Tools --> 
     <script src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js"></script> 

     <!--- add styles ---> 
     <!--- <link rel="stylesheet" type="text/css" href="css/loginbox.css" /> ---> 
     <link rel="stylesheet" type="text/css" href="http://static.flowplayer.org/tools/css/standalone.css"/> 
      <style> 
      /* error message */ 
.error { 
    height:15px; 
    background-color:#FFFE36; 
    font-size:13px; 
    border:1px solid #E1E16D; 
    padding:4px 10px; 
    color:#000; 
    display:none; 

    z-index: 9999; 
    -moz-border-radius:4px; 
    -webkit-border-radius:4px; 

    -moz-box-shadow:0 0 6px #ddd; 
    -webkit-box-shadow:0 0 6px #ddd;  
} 
.error p { 
    margin:0;  
} 

     .modal { 
      background-color:#fff; 
      display:none; 
      width:350px; 
      padding:15px; 
      text-align:left; 
      border:2px solid #333; 

      opacity:0.8; 
      -moz-border-radius:6px; 
      -webkit-border-radius:6px; 
      -moz-box-shadow: 0 0 50px #ccc; 
      -webkit-box-shadow: 0 0 50px #ccc; 
     } 

     .modal h2 { 
      background:url(/img/global/info.png) 0 50% no-repeat; 
      margin:0px; 
      padding:10px 0 10px 45px; 
      border-bottom:1px solid #333; 
      font-size:20px; 
     } 
     </style> 
    </head> 

    <body> 

    <p> 
     <div id="loginMenu"> 
     <cfif session.auth.isLoggedIn> 
      <a href="logout.cfm">Log out</a> 
     <cfelse> 
      <a href class="modalInput" rel="#login">Login</a> 
     </cfif> 
     <a href class="modalInput" rel="#register">Register</a> 
     </div> 
    </p> 

    <!-- user input dialog --> 
    <cfif isDefined("session.auth.failedLogins")> 
     <cfset loginMsg=#session.auth.failedLogins# & " failed logins"> 
    <cfelse> 
     <cfset loginMsg="Please log in"> 
    </cfif> 
    <div><em/></div> 

    <div class="modal" id="login"> 
     <!-- login form --> 
     <form name="loginForm" id="loginForm" autocomplete="off"> 
     <div id="loginMsg"><p><cfoutput>#loginMsg#</cfoutput></p></div> 
     <p><input type="text" name="username" placeholder="username..." title="Must be at least 8 characters." required="required" ></p> 
     <p><input type="password" name="password" placeholder="password..." title="Try to make it hard to guess" required="required"></p> 
     <p> 
     <button type="submit"> Login </button> 
     <button type="button" class="close"> Cancel </button> 
     </p> 
     </form> 
    </div> 

    <div class="modal" id="register"> 
    <!-- signup form--> 
     <form id="signupForm" autocomplete="off" method="get" action="" novalidate="novalidate"> 
     <CFSET structDelete(session, 'form')> 
     <cfset session.form.validate_require="username|'Username' is a required field.;password|'Password' is a required field.;confirmpassword|'Confirm password' is a required field.;"> 


     <fieldset> 
     <p> 
     <label>username *<br> 
     <input type="text" name="username" placeholder="username..." />  </label> 
     </p> 
     <p> 
     <label>password *<br> 
     <input type="password" name="password" required="required" minlength="6" placeholder="password..." /></label>  
     </p> 
     <p> 
     <label>confirm password *<br> 
     <input type="password" name="confirmpassword" data-equals="password" placeholder="password..."/></label> 
     </p> 
     <p> 
      <button type="submit">Sign Up</button> 
      <button type="button" class="close"> Cancel </button> 
     </p> 
      </fieldset> 
     </form> 
    </div> 

    <script> 
    $(document).ready(function() { 

    var triggers = $(".modalInput").overlay({ 

     // some mask tweaks suitable for modal dialogs 
     mask: { 
      color: '#ebecff', 
      loadSpeed: 200, 
      opacity: 0.9 
     }, 

     closeOnClick: false, 
     onClose: function() { 
      $('.error').hide(); 
     } 
    }); 

    $("#loginForm").submit(function(e) { 
     var form = $(this); 

      // submit with AJAX 
      $.getJSON("/yourGPpractice/cfcs/security.cfc?method=testSignup&returnformat=JSON&queryformat=column&" + form.serialize(), function(json) { 

       // everything is ok. (server returned true) 
       if (json === true) { 
        // close the overlay 
        triggers.eq(0).overlay().close(); 
        $("#loginMenu").html("<a href='logout.cfm'>Log out</a>"); 

       // server-side validation failed. use invalidate() to show errors 
       } else { 
        var tempString 
        tempString = "<p>" + json + " failed logins</p>" 
        $("#loginMsg").html(tempString); 

       } 
      }); 

      // prevent default form submission logic 
      e.preventDefault(); 

    }); 


    // initialize validator and add a custom form submission logic 
    $("#signupForm").validator().submit(function(e) { 

     var form = $(this); 

     // client-side validation OK. 
     if (!e.isDefaultPrevented()) { 

      // submit with AJAX 
      $.getJSON("/yourGPpractice/cfcs/security.cfc?method=testSignup&returnformat=JSON&queryformat=column&" + form.serialize(), function(json) { 

       // everything is ok. (server returned true) 
       if (json === true) { 
        // close the overlay 
        triggers.eq(0).overlay().close(); 
        $("#loginMenu").html("<a href='logout.cfm'>Log out</a>"); 

       // server-side validation failed. use invalidate() to show errors 
       } else { 
        form.data("validator").invalidate(json); 
       } 
      }); 

      // prevent default form submission logic 
      e.preventDefault(); 
     } 
    }); 

    $.tools.validator.fn("[minlength]", function(input, value) { 
     var min = input.attr("minlength"); 

     return value.length >= min ? true : {  
      en: "Please provide at least " +min+ " character" + (min > 1 ? "s" : ""), 
     }; 
    }); 

    $.tools.validator.fn("[data-equals]", "Value not equal with the $1 field", function(input) { 
     var name = input.attr("data-equals"), 
      field = this.getInputs().filter("[name=" + name + "]"); 
     return input.val() == field.val() ? true : [name]; 
    }); 

    }); 
    </script> 

    </body> 

    </html> 

security.cfc包含以下方法

<cffunction name="testSignup" access="remote" returnType="any" output="false"> 
    <cfset var validationVar= structNew()> 
    <cfset validationVar = true> 
    <cfreturn validationvar> 
</cffunction> 

在Firebug中,我可以看到返回的是「真」和我的虛擬登錄的loginmenu格設置正確地更改爲「註銷」。但是,這發生在未被取消的模態層下。

triggers.eq(0).overlay()。close();正確關閉登錄表單的模式,但不會取消登記表單的疊加,儘管下面的行確實正確地更改了'loginmenu'div以註銷,下的模式。這是怎麼回事?

這是真氣。

 // everything is ok. (server returned true) 
     if (json === true) { 
      // close the overlay 
      alert("about to close the overlay!"); 
      triggers.eq(0).overlay().close(); 
      $("#loginMenu").html("<a href='logout.cfm'>Log out</a>"); 

顯示警報,但triggers.eq(0).overlay()。close();不??

回答

0

作爲簡單發現了它,在$("#signupForm").validator().submit(function(e) {

// close the overlay 
triggers.eq(1).overlay().close(); 

即參考所述第二覆蓋觸發如2項,JavaScript的引用從0開始

0

作爲變化e.preventDefault();return false;

+0

我試圖更換即在$(「#signupForm」)。validator()。底部提供false的函數preventDefault()。提交(函數(e)代碼塊但沒有區別我很害怕 – Saul