停止输入清除onFocus

问题描述:

我有这个自动建议应用程序的电子邮件。这一切都运作良好,除非当我点击输入字段外,然后再点击它清除'onFocus'。任何想法如何我可以阻止这种情况发生?停止输入清除onFocus

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();" /> 
+0

'fill()'每次单击时都会传递一个空值。摆脱'$('#email')。val()'它不会。 – Archer 2013-02-15 21:41:45

+0

@Archer从技术上说它是通过'undefined',这与'null'不是一回事。 – Aren 2013-02-15 21:42:53

+0

@Aren,技术上是的。不同的单词,但相同的结果虽然:) – Archer 2013-02-15 21:43:54

onClick="fill();"打电话给你的元素上执行fill(undefined)每当你点击输入框。

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

这与焦点没有任何关系,请尝试单击该框,输入一个值然后再次单击该框,它可能会擦除该值,而无需先单击。


对于它的价值,你可能会过度复杂化。我想象清除框的要求是删除占位符文本。如果您正在设计一个远程新浏览器,请使用HTML5 placeholder="E-Mail"让浏览器在用户未输入任何内容时以较轻的文本(或其他)显示该文本。

如果你要支持旧的浏览器有办法解决这个也一样,这是一个简单但不完美的方式(可以概括这一点,并做出一个jQuery插件或去找一个在那里已经为时已存在):

HTML:

<input type="text" id="email" class="placeholder" value="E-Mail" /> 

CSS:

.placeholder { color: #ccc; } 

的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); 
+0

哦,是的,它的确如此。有什么办法呢? – user2014429 2013-02-15 21:43:40

+0

@ user2014429当然,但您需要一些标准来定义您何时需要重点清除该框,以及何时不需要。 – Aren 2013-02-15 21:45:32

+0

谢谢你。我现在就试试看 – user2014429 2013-02-15 22:04:28