2008年5月1日 星期四

JavaScript--禁止使用者按Backspace鍵的小技巧

轉貼

如何在IE/Firefox中禁止使用者按下"Backspace"鍵回上一頁的問題,順便將結果分享給有需要的人。

作法:一般來說,在處理這樣的問題時,我們都會從"事件"(Event)這方面去著手。在瀏覽器(或一般視窗程式)中,移動/點擊滑鼠、按下鍵盤、網頁讀取完成等等動作都會造成事件被觸發,而要避免使用者進行這些行為,就要在事件被觸發的同時將其攔下,就會造成功能失效。

下面這段JavaScript可以攔截使用者按"Backspace"鍵:

<script language="JavaScript">
document.onkeydown = check;
function check(e) {
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
alert(code);
if (code == 8)
{
   code = 0;
   window.alert('test');
   return false;
{color:#0000ff}}
return true;
{color:#0000ff}}
</script>

上面這段程式在IE中可以正常運作,但是搬到了Firefox後卻會發現頁面已經換了,警告視窗才跳出來。

這是因為在Firefox的事件處理程序與IE不同所導致的情況,換頁事件會比keydown還早發生,所以在keydown攔下事件之前,換頁事件已經先發生了,也就是說...keydown欄太慢,無效!!

解決的方法就是將keydown事件改用keypress事件,這樣在Firefox就可以正常運作了........

不過很不幸的,在IE裡面這套又行不通了,所以程式碼要加上判斷的功能,依照不同的瀏覽器做不同的事件設定:

if(window.navigator.userAgent.indexOf("MSIE")>=1)
{
  document.onkeydown = check;
{color:#0000ff}}else if (window.navigator.userAgent.indexOf("Firefox")>=1){
  document.onkeypress = check;
{color:#0000ff}}
function check(e){
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;

if (code == 8)
{
   code = 0;
   window.alert('請勿返回程式');
   return false;
{color:#0000ff}}
return true;
{color:#0000ff}}
 

剛才網友詢問如何在IE/Firefox中禁止使用者按下"Backspace"鍵回上一頁的問題,順便將結果分享給有需要的人。

作法:一般來說,在處理這樣的問題時,我們都會從"事件"(Event)這方面去著手。在瀏覽器(或一般視窗程式)中,移動/點擊滑鼠、按下鍵盤、網頁讀取完成等等動作都會造成事件被觸發,而要避免使用者進行這些行為,就要在事件被觸發的同時將其攔下,就會造成功能失效。

下面這段JavaScript可以攔截使用者按"Backspace"鍵:

(IE版)
程序代碼
[color=#0000ff]<script language="JavaScript">
document.onkeydown = check;
function check(e) {
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
alert(code);
if (code == 8)
{
   code = 0;
   window.alert('test');
   return false;
{color:#0000ff}}
return true;
{color:#0000ff}}
</script>[/color]

上面這段程式在IE中可以正常運作,但是搬到了Firefox後卻會發現頁面已經換了,警告視窗才跳出來。

這是因為在Firefox的事件處理程序與IE不同所導致的情況,換頁事件會比keydown還早發生,所以在keydown攔下事件之前,換頁事件已經先發生了,也就是說...keydown欄太慢,無效!!

解決的方法就是將keydown事件改用keypress事件,這樣在Firefox就可以正常運作了........

不過很不幸的,在IE裡面這套又行不通了,所以程式碼要加上判斷的功能,依照不同的瀏覽器做不同的事件設定:

程序代碼
if [color=#0000ff](window.navigator.userAgent.indexOf("MSIE")>=1)
{
  document.onkeydown = check;
{color:#0000ff}}else if (window.navigator.userAgent.indexOf("Firefox")>=1){
  document.onkeypress = check;
{color:#0000ff}}
function check(e){
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;

if (code == 8)
{
   code = 0;
   window.alert('請勿返回程式');
   return false;
{color:#0000ff}}
return true;
{color:#0000ff}}

這樣,就打造出一個能夠在IE/Firefox上使用的攔截"Backspace"的小程式了

沒有留言: