2014-04-25 73 views
0

目前我使用下面的代碼允許用戶內容在我的web應用程序「通過翻轉」:當用戶在文本框中時阻止javascript的keyup函數效果?

$(this).keyup(function(e) { 
    if(e.which == 37) { 
     document.location = $("#prev_button").attr('href'); 
    }else if(e.which == 39) { 
     document.location = $("#next_button").attr('href'); 
    } 
}); 

的問題是,如果用戶在搜索表單頁面的頂部,我不希望箭頭鍵重定向頁面(相反,它們應該像通常那樣沒有功能,即允許文本光標圍繞文本移動)。

表單ID是「searchForm」 - 我可以向if語句添加一個子句,如果選擇了搜索表單,它的計算結果爲false?

+0

是的,我們可以檢查元素的'focus'。以jQuery爲例:'if($(「#myEle」)。is(「:focus」))return false; '。 –

回答

1

我會使用類似:Demo

$(this).keyup(function(e) { 
    if(~['input', 'textarea'].indexOf(e.target.tagName.toLowerCase())) return; 
    if(e.which == 37) { 
     document.location = $("#prev_button").attr('href'); 
    }else if(e.which == 39) { 
     document.location = $("#next_button").attr('href'); 
    } 
}); 

這樣,您可以排除所有<input><textarea>元素。

IMO(不包括#searchbox)不是一個很好的解決方案,因爲將來您可能會更改其id或包含其他文本字段,但忘記您必須反映排除腳本中的更改。

+0

該解決方案是1行代碼,它可以防止我可能需要添加的所有將來的表單,從而導致問題。我建議任何人讀這個問題來使用這個解決方案,因爲它是通用的,簡潔的和正確的。 – mgoldwasser

3

可以阻止事件的傳播在文本框中,當這樣的事件不會使它到你的其他處理程序:

$('#searchbox').keyup(function(e) { 
    e.stopPropagation(); 
}); 
相關問題