2012-11-09 27 views
3

我有一個簡單的搜索功能是行爲不端。搜索框位於我們不想在搜索時提交的表單內,因此我在下面進行了設置。jQuery preventDefault沒有行爲

$(function() { 
    jQuery.fn.onEnter = function(callback) { 
     this.keyup(function(e) { 
      if(e.keyCode == 13) { 
       e.preventDefault(); 
       //e.stopPropagation(); 
       if (typeof callback == 'function') 
        callback.apply(this); 
      } 
     }); 
     return this; 
    } 
    $('#txtSearch').onEnter(function() { 
     search(); 
     return false; 
    }); 
    $('#search_btn').click(function() { 
     search(); 
     return false; 
    }); 

    function search() { 
     alert('searching'); 
    } 
}); 

e.preventDefault()行不起作用,所以搜索功能會像表單提交一樣觸發。我已經嘗試過e.preventDefault()e.stopPropagation(),但沒有運氣。

+0

回車鍵表單內將觸發表單的提交功能 - 這樣處理它在那裏 –

+2

你停止瀏覽器的默認keyup事件不能提交事件。 –

+0

我建議你使用'return false'。 – Rajnish

回答

3

你停止瀏覽器的默認keyup事件不submit事件。您最好的選擇是使用​​,這樣輸入密鑰本身就會停止。

也使用e.which這是規範crossbrowser。

您可以嘗試添加一個keydown處理程序來防止輸入密鑰並在keyup中執行某些操作。

DEMO:http://jsfiddle.net/PSkvm/1/

jQuery.fn.onEnter = function(callback) { 
    this.keyup(function(e) { 
     if(e.keyCode == 13) { 
      //e.stopPropagation(); 
      if (typeof callback == 'function') 
       callback.apply(this); 
     } 
    }).keydown(function (e) { 
     if(e.keyCode == 13) { 
      e.preventDefault(); 
     } 
    }); 
    return this; 
} 
+0

感謝您的解釋。你的代碼完美地工作。 –

0

preventDefault()不適用於窗體。嘗試返回false;代替。

+1

我希望他們在onsubmit工作,這是不綁定提交 – mplungjan

+0

試試這個:http://www.malsup.com/jquery/form/他們有一個beforeSend鉤子,當返回false時,阻止提交事件。 – ChuckE

0

最有可能e.keyCode沒有被捕獲使用

var code = e.keyCode || e.which; 

修改代碼以:

var code = e.keyCode || e.which; 
if(code == 13) { 
    e.preventDefault(); 
    if (typeof callback == 'function') 
     callback.apply(this); 
    }