Javascript 停止输入清除焦点

Javascript 停止输入清除焦点,javascript,jquery,html,Javascript,Jquery,Html,我有一个电子邮件自动建议应用程序。这一切都很好,除了当我在输入字段外单击,然后在输入字段中单击“上一步”清除“聚焦”时。有没有办法阻止这一切的发生 function suggest(inputString){ if(inputString.length == 0) { $('#suggestions').fadeOut(); } else { $('#email').addClass('load'); $.post("auto.php", {q

我有一个电子邮件自动建议应用程序。这一切都很好,除了当我在输入字段外单击,然后在输入字段中单击“上一步”清除“聚焦”时。有没有办法阻止这一切的发生

function suggest(inputString){
    if(inputString.length == 0) {
      $('#suggestions').fadeOut();
    } else {
    $('#email').addClass('load');
        $.post("auto.php", {queryString: ""+inputString+""}, function(data){
            if(data.length >0) {
                $('#suggestions').fadeIn();
                $('#suggestionsList').html(data);
                $('#email').removeClass('load');
          }
      });
   }
}

 function fill(thisValue) {
    $('#email').val(thisValue);
    setTimeout("$('#suggestions').fadeOut();", 600);
}

<input type="text" id="email" onKeyUp="suggest(this.value);" onClick="fill();" />
函数建议(inputString){
如果(inputString.length==0){
$(“#建议”).fadeOut();
}否则{
$('#email').addClass('load');
$.post(“auto.php”,{queryString:“+inputString+”},函数(数据){
如果(data.length>0){
$(“#建议”).fadeIn();
$('#SuggestionList').html(数据);
$('#email').removeClass('load');
}
});
}
}
函数填充(thisValue){
$('#email').val(此值);
setTimeout(“$('#建议”).fadeOut();”,600);
}
每当单击输入框时,对元素的
onClick=“fill();”
调用都在执行
fill(未定义)

第一件事是将输入框的值设置为
thisValue
(当前为
undefined
),这将有效地清除输入框

这与焦点无关,请尝试单击该框,输入一个值,然后再次单击该框,它可能也会在不先单击“关闭”的情况下擦除该值


无论如何,你可能把事情复杂化了。我想清除该框的要求是删除占位符文本。如果您正在设计远程新浏览器,请使用HTML5
placeholder=“E-Mail”
让浏览器在用户未输入任何内容时以较轻的文本(或任何内容)显示

如果您必须支持较旧的浏览器,也有办法解决这个问题,这是一个简单但并不完美的方法(您可以对此进行推广,制作一个jQuery插件,或者找到一个已经存在的插件):

HTML:

Javascript:

;(function($) {

  $(document).ready(function() {

    $("#email").on('focus', function() {
      var $this = $(this);
      if ($this.hasClass('placeholder')) {
        $this.removeClass('placeholder');
        $this.val('');
      }
    });

    $("#email").on('keyUp', function() {
      // this is where your key-up code goes
    });

  });
})(jQuery);

fill()
每次单击时都会传递一个空值。去掉
$('#email').val()
,它就不会了。@Archer从技术上讲,它的传递
未定义
,这与
null
@是不同的,从技术上讲是的。不同的词,但结果相同:)在一个不相关的注释上,您使用
onClick
onKeyUp
属性是否有特定的原因?jQuery使您能够通过不使DOM依赖于javascript实现来分离表单和函数。您应该使用
$()。在(…)
上,或者至少使用
$()。单击(…)
等…。哦,是的,确实如此。有没有办法解决这个问题?@user2014429当然,但是你需要一些标准来定义何时需要焦点清除框,何时不需要。
.placeholder { color: #ccc; }
;(function($) {

  $(document).ready(function() {

    $("#email").on('focus', function() {
      var $this = $(this);
      if ($this.hasClass('placeholder')) {
        $this.removeClass('placeholder');
        $this.val('');
      }
    });

    $("#email").on('keyUp', function() {
      // this is where your key-up code goes
    });

  });
})(jQuery);