2010-10-03 32 views
8

我正在使用jQuery,並希望用戶可以在將數據輸入到搜索字段以開始搜索之後按回車鍵。jQuery keyup和Safari中的「輸入」

我用下面的代碼:

 $('#textSearch').keyup(function (event) { 
      if (event.keyCode == '13') { 
       doSearch(); 
      } 
      return false; 
     }); 

它可以完美運行在Firefox和IE,但不是在所有的Safari。發生什麼事是,當我在safari中輸入時,表單正在提交,而這不是我想要的。

添加onsubmit =「return false;」到表單工作,但不是一個選項,因爲表單標籤是在asp.net頁面的主頁上,我需要在其他頁面上提交表單。

有沒有辦法讓這個功能在Safari中工作?

編輯: 我也嘗試只顯示警報而不是doSearch()函數。警報顯示正常,但之後表單正在提交。

回答

4

瀏覽器可能會有所不同,以該事件觸發提交。在這種情況下,Safari可能會在keydown事件上提交。
你可以觀看提交事件不改變的標記並取消它:

$('#the-id-of-the-form').submit(function(e) { 
    e.preventDefault(); 
}); 

然後,您可以監聽keyup事件和處理它,你現在正在做的事情。

+0

工作完美!謝謝! :) – Martin 2010-10-03 15:55:21

3

試試這個:

$('#textSearch').keyup(function (event) { 
     var key = event.keyCode || event.which; 

     if (key === 13) { 
      doSearch(); 
     } 
     return false; 
    }); 
+0

謝謝!我嘗試過,但沒有任何區別。我還用更多的細節更新了這個問題。 – Martin 2010-10-03 15:01:50

1

附加防止deault

$('#textSearch').keyup(function (event) { 
    if (event.keyCode == '13') { 
     event.preventDefault(); 
     doSearch(); 
    } 
    return false; 
}); 
+0

謝謝,但它仍然提交表格.. – Martin 2010-10-03 15:52:47

0

我使用「keydown」,因爲「keyup」不適合我。我還需要這個輸入以禁用我使用AJAX添加的輸入字段,因此是「活的」。

您需要將「更改」處理程序綁定到該字段。此版本退出字段(「模糊」),然後觸發字段上的更改,然後觸發更改。如果沒有模糊,更改會觸發兩次!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
} 
); 
0

我使用「keydown」,因爲「keyup」不適合我。我還需要這個輸入以禁用我使用AJAX添加的輸入字段,因此是「活的」。

您需要將「更改」處理程序綁定到該字段。此版本退出字段(「模糊」),然後觸發字段上的更改,然後觸發更改。如果沒有模糊,更改會觸發兩次!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
});