If you look at the "Ask question" form in stackoverflow, the question input field is automatically selected. When you click on it, the whole thing disappears, aka Togg开发者_如何学GoleVal
However, if you use the toggleVal plugin, it automatically erases the default value upon .select(), even if the select() was done programatically
How does Stackoverflow prevent that automatic erasing?
I looked at the source and found this:
<input id="title" name="title" type="text" maxlength="300" tabindex="100" class="ask-title-field edit-field-overlayed" value="">
<span class="edit-field-overlay">what's your programming question? be specific.</span>
Based on that here is my assumption (without looking at the code). I'm thinking they use the text in the span tag as the default value for the text input. I know this because I changed the text in the span (using firebug) and then refocused into the field, it displayed my edited text. Anyway, here's something I quickly wrote.
// set the default value based on the span text
$('input[name=foo]').val($('.foo-overlay').text());
// whenever there is focus or blur
$('input[name=foo]').bind('focus blur',function(){
// get the default text from the span
var defaultText = $('.foo-overlay').text();
// if the input field has default text
if(this.value == defaultText){
this.value = '';
}
// if the input is blank, set it to the default text
else if (!this.value.length){
this.value = defaultText;
};
});
Here's a demo. I'm not saying this is exactly how they are doing it. It's speculation based on a brief look.
edit
Just reread your question and realized you might be after how to not initially delete the default value? Check out this similar demo: http://jsbin.com/oyani4/2/
And here's the updated code:
// set the default value based on the span text
$('input[name=foo]').val($('.foo-overlay').text());
// whenever there is focus or blur
$('input[name=foo]').bind('focus blur',function(){
// if there is no length, reset to default text
if (!this.value.length){
this.value = $('.foo-overlay').text();
};
});
$('input[name=foo]').keydown(function(){
// if there is length and it's not our default text
if (this.value.length && this.value == $('.foo-overlay').text()){
this.value = '';
};
});
加载中,请稍侯......
精彩评论