2011-01-28 54 views
1

我有一些麻煩我onFocusonBlur事件的正常工作jQuery的聚焦狀態的onblur問題

這裏是我

var var1 

$("input").focus(function() { 

    var1 = $(this).val() 

if ($(this).val()==var1) { 
     $(this).val('').css({'color': "#000", 'font-style': 'normal', 'font-weight': 'bold'}); 
    } 
    $(this).css({'background-color':'#d7df23' });  
}); 

$("input").blur(function() { 
    if ($(this).attr("value")=="") { 
     $(this).val(var1).css({'color': "#666", 'font-style': 'italic', 'font-weight': 'normal'}); 
    } 
    $(this).css({'background-color':'#EEEEEE' });  
}); 

這是我的HTML

<input type="text" id="tbTitle" value="Title"> 

<input type="text" id="tbTitle1" value="Title1"> 

<input type="text" id="tbTitle2" value="Title2"> 

該作品如果你不改變文本框的值。

基本上我想獲得輸入的原始值並將其存儲在var中,然後如果該字段爲空,則將原始值放回。

在它投入的無論是在焦點

文本框中的值的時刻是否有存儲原始值,只有其更改爲onBlur的方法嗎?

這裏是我的jsfiddle

+0

你想存儲輸入字段的VAR1或什麼的默認值?你爲什麼不喜歡把關注時刻的價值? – ikostia 2011-01-28 13:16:15

+0

如果我將該值更改爲Test,然後再次單擊該框,它將刪除Test,然後將其重新放入,如果其空白,但我想再次將原始值即Title_歸回 – 2011-01-28 13:19:54

回答

5

這裏是我的解決方案...

http://jsfiddle.net/Sohnee/YTTD5/4/

或者在代碼...

var originalValues = new Array(); 

$("input").focus(function() { 

    if (!originalValues[this.id]) { 
     originalValues[this.id] = $(this).val() 
    } 

    if ($(this).val()==originalValues[this.id]) { 
      $(this).val('').css({'color': "#000", 'font-style': 'normal', 'font-weight': 'bold'}); 
     } 
     $(this).css({'background-color':'#d7df23' });  
    }); 

    $("input").blur(function() { 
     if ($(this).attr("value")=="") { 
      $(this).val(originalValues[this.id]).css({'color': "#666", 'font-style': 'italic', 'font-weight': 'normal'}); 
     } 
     $(this).css({'background-color':'#EEEEEE' });  
    }); 
0

您使用的是單var1,但多個文本框鏈接。因此,當您離開文本框時,var1將會被您輸入另一個文本框中。此外,在測試元素的值之前,您正在分配var1,因此==將始終爲真。

「獲得了輸入的原始值並將其存儲在一個變種,然後,如果該字段爲空把原來的值改回」你可以做這樣的事情:

var values = {}; 

$("input").focus(function() { 

    var $this = $(this); 

    // Save the value on focus 
    values[this.id] = $this.val(); 

}).blur(function() { 

    var $this = $(this); 

    // Restore it on blur 
    if ($this.val() == "") { 
     $this.val(values[this.id]); 
    } 

}); 

我離開以上的CSS的東西,因爲它不是很清楚你想要做什麼。加回來很容易。

0

嘗試設置var var1 = null;初始化,然後當焦點觸發器剛剛設置它第一次像var1 = var1 ?? $(this).val();它看起來每次都保持重寫值,也可能想要考慮將原始值存儲爲實際對象上的數據全局變量的

+0

,這將起作用只有一個文本框,你有3個,考慮使用每個DOM對象的數據屬性 – 2011-01-28 13:20:48

0

沒有CS的東西..如果我們輸入一個值爲'rel'屬性值的字段。 退出該字段時,如果該值爲空,則複製可能在rel屬性中的任何內容,該屬性不是或者是初始焦點上存在的值。

$("input").focus(function() { 
if($(this).val()!=''){ 
    $(this).attr('rel',$(this).val()); 
} 
}); 

$("input").blur(function() { 
if($(this).val()==''){ 
    $(this).val($(this).attr('rel')); 
} 
}); 
0

您的問題是,您在焦點時刻存儲輸入值,而不是在初始設置時刻。 這段代碼可能是有用的:

var initials ={}; 
$(document).ready(function(){ 
    $('input').each(function(){ 
    initials[this.id] = $(this).attr('value'); 
    }); 
}); 

$('input').focus(function(){ 
    // do whatever you want to 
}); 

$('input').blur(function(){ 
    if($(this).attr('value')==''){ 
    $(this).attr('value', initials[this.id]); 
    } 
    // do other stuff 
});