2013-02-15 91 views
0

我有這個自動建議應用程序的電子郵件。這一切都運作良好,除非當我點擊輸入字段外,然後再點擊它清除'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

回答

1

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