2012-01-27 62 views
1

我为对话框下面的HTML代码:在ESC按键,关闭自定义对话框与jQuery

<div id="modal-dialog" class="no-display"> 
     <div class="form"> 
      <div class="close"> 

      </div> 
      <div align="center"> 
       <h2><u>form</u></h2> 
      </div>   
      <form> 
       <label for="yourname">Full name:</label><input type="text" name="yourname"> 
       <label for="email">E-mail:</label><input type="text" name="email"> 
       <label for="message">Message:</label></textarea><textarea type="text" name="message"></textarea><br/> 
       <div class="clear"></div> 
       <p align="center"><button>Send feedback</button></p> 
      </form> 
     </div> 
    </div> 

的JavaScript:

$("#clickfeed").live("click", function() { 
     $("#modal-dialog").removeClass("no-display"); 
    }); 

我写道:

$("#modal-dialog").live("keyup", function(e) { 
     if(e.keyCode === 27 && !($(this).hasClass("no-display"))) 
     { 
      $("#feedback-modal-dialog input").each(function() { 
       $(this).attr("value",""); 
      }); 
      $("#feedback-modal-dialog textarea").each(function() { 
       $(this).val(""); 
      }); 
      $("#modal-dialog").addClass("no-display"); //or .hide() 
     }  
    }); 

ESC只有当输入焦点不在时才有效。

我想按下ESC时关闭modal-dialog框。

在我的JS代码错了吗?

谢谢

+0

您使用的是哪个版本的jQuery? – Nix 2012-01-27 08:56:29

+0

我使用1.7.1版本 – 2012-01-27 08:57:09

+0

只是好奇,在比较关键代码时使用'==='或'=='有什么不同吗? – Niklas 2012-01-27 08:57:47

回答

1

如何:

$("html").live("keyup", function(e) { 

if(e.keyCode === 27 && !($('#modal-dialog').hasClass("no-display"))) 

    escape_check(); 

} 

} 

function escape_check() { 

$("#modal-dialog").removeClass("no-display"); 

$("#feedback-modal-dialog input").each(function() { 
    $('#modal-dialog').attr("value",""); 
}); 
$("#feedback-modal-dialog textarea").each(function() { 
    $('#modal-dialog').val(""); 
}); 
$("#modal-dialog").addClass("no-display"); //or .hide() 


} 
+0

'$(“html”)'我错过了:))。我的错。谢谢 – 2012-01-27 09:07:51

2

绑定到$("#modal-dialog")不会捕获ESC键被按下,如果$("#modal-dialog"可是没有焦点。

你会好起来的KEYUP结合到整个文档,这将提高按键事件,无论在网页上有焦点。

+1

感谢您的支持!如果你不知道焦点要求,那么调试这个很困难。 – Bay 2012-02-13 15:30:17

1

.live()因为jQuery的1.7已被弃用。请尝试使用.on()代替。

它的工作原理一样的。请参阅documentation

+0

我将使用'on'而不是'live'。 Thx寻求建议 – 2012-01-27 09:08:34