-1
$(document).ready(function()
{
   $('#searchInput').keypress(function() 
   {
      if($(this).val() == '')
      {
        $('#button').attr('disabled', true);
      }
      else
      {
        $('#button').removeAttr('disabled');
      }

   });
});

我在按钮 id 旁边添加了“禁用”现在我有一个问题。当我按下空格并单击搜索按钮时,没问题,一切都很好。但是在我按下空格键并按下退格键后,我正在单击搜索按钮并显示结果。我无法解决问题。我想防止空间初始。

4

3 回答 3

1

空格不为空,您应该尝试$.trim()函数,trim 将删除所有空格并只给出没有任何尾随空格的字符串

 $('#searchInput').keypress(function() 
 {
   if ($.trim($(this).val()) == '')
   {
     $('#button').attr('disabled', true);
   }
   else
   {
     $('#button').removeAttr('disabled');
   }
 });
于 2013-02-10T13:12:54.653 回答
0

Just a bit minified and use $.trim to prevent enabling by whitespace:

$('#searchInput').keyup(function () {
       $('#button').prop('disabled', !$.trim(this.value));
}).keyup();

Demo

于 2013-02-19T01:40:41.523 回答
0

奇怪的是,您遇到了一些奇怪的浏览器行为。在 IE 和 Webkit 浏览器中,backspace不会触发keypress事件,因此永远不会执行处理程序。

然而,在 Firefox 中,该函数在元素的 更改之前运行。value因此,当您键入 时space,该函数将运行并且value仍然为空。因此该按钮被禁用。然后按backspace,运行的函数value仍然是一个单字符的字符串,其中有一个空格。所以按钮是启用的。

您需要使用它,因为它在按下keyup时在所有浏览器中运行,并且在更改后运行。backspacevalue

$(document).ready(function () {
    $('#searchInput').keyup(function () {
        if (this.value == '') {
            $('#button').prop('disabled', true);
        } else {
            $('#button').prop('disabled', false);
        }
    }).keyup(); 
});

工作示例

我所做的更改:

  • 更改keypresskeyup
  • this.value而不是$(this).val():快得多
  • prop('disabled', true)而不是attr('disabled', true):这是使用的正确功能,并且避免做奇怪的事情removeAttr
  • 添加keyup()到末尾,因此该功能也在页面首次加载时运行
于 2013-02-10T13:15:28.567 回答