2011-09-21 73 views
2

我试图绑定一个按键(“输入”)来触发一个jQuery模态对象中的函数。在下面的代码中,我想在检测到按键事件时触发$(this).dialog(“login”)。但是,似乎我无法调用self.dialog(“登录”)。我看着这个错误的方式吗?jQuery UI模式问题

 $("#login-dialog").dialog({ 
     autoOpen: false, 
     height: 250, 
     width: 350, 
     modal: true, 
     open: function() { 
      var self = $(this); 
      $("#login-dialog").load("/accounts/login/", function() { 
       $("#id_username").focus() 
       .keypress(function(event) { 
        if (event.which == 13) { 
         event.preventDefault(); 
         self.dialog("login"); 
        } 
       }); 
      }); 
     }, 

     buttons: { 
      close: function() { 
       $(this).dialog("close"); 
      }, 

      login: function() { 
       $.ajax({ 
        type: "POST", 
        url: "/accounts/login/", 
        data: $("#login-form").serialize(), 
        success: function(data) { 
         var errors = $(data).find("#login-error").val(); 
         if (errors) { 
          $("#error-message").replaceWith("<p class='error'>" + "Your username and password didn't match" + "</p>"); 
         } else { 
          window.location = "/builder"; 
         } 
        } 
       }); 
      } 
     } 
    }); 

回答

0

快速工作围绕你的问题,里面的“按键”功能,使用下面的代码

$("#login-dialog").dialog("option").buttons.login(); 
+0

啊,多么愚蠢的我 - 我应该知道。感谢您的协助! – Beor

0

我会附加一个处理程序到登录窗体的onsubmit事件。通过这个处理函数,用适当的字段值调用login函数(防止事件的默认值,所以表单实际上没有提交)。

现在,一个很好的副作用是,按ENTER当在窗体上,该处理程序将被调用。这种方法也会降低一点,并使您的所有代码更具可移植性。

就我个人而言,我使用一个插件,您只需将一个表单元素传入,将通过使用所有表单属性和输入元素的ajax发送它。