Witam
Robię sobie skrypt do umieszczania podpowiedzi w polach formularza.
Chciałem jakoś oflagowywać kiedy tip jest aktywny i kiedy nie, dowiedziałem się, że do takich celów używa się funkcji data().
Głównie chodzi o to, żeby pola z aktywnym tipem było czyszczone przy submicie.
No i tak, przy stracie focusu pola sprawdzenie czy tip jest aktywny (sprawdzenia z wyk. owej funkcji data()),
zwraca wartość (true/false), natomiast przy submicie zwraca mi już undefined i tip zapisuje się w bazie:/
Może znajdzie ktoś czas wczytać się w kod i napisać o chodzi z tą data(), czy może muszę użyć innego sposobu?
[EDIT] Ppprawiłem skrypt na bardziej oczywisty sposób przechowywania stanu w polu obiektu, teraz działa, jednak dalej nie wiem czemu użycie data(), nie dawało efektu...
Kod:
$.fn.hasValue = function() {
return this.val().trim().length;
}
function makeTips(options) {
defaults = {
inputTipColor : '#b5b5b5',
inputTextColor : '#000'
}
var selectors = 'input[type="text"], textarea',
opts = $.extend({}, defaults, options),
tips = getTips();
createInputsTips();
addTipsClearerOnSubmit();
function getTips() {
var tips = {};
$('.tip').each(function() {
var tip = $(this),
tipId = tip.attr('id').replace(/-tip/, ''), // fieldname-tip
inputTip = {
content : tip.text(),
isActive : false
};
tips[tipId] = inputTip;
}).hide();
return tips;
}
function createInputsTips() {
$(selectors).each(function() {
var input = $(this);
if (hasTip(input)) {
if (! input.hasValue()) {
setTipInput(input, true);
} else {
setTipInput(input, false);
}
addTipListeners(input);
}
});
}
function addTipListeners(input) {
input.focus(function(){
if (isTipActive(input))
input.val('');
input.css('color',opts.inputTextColor);
}).blur(function() {
if ( isValueNotEqualTipContent(input) && input.hasValue()) {
setTipInput(input, false);
} else {
setTipInput(input, true)
}
alert(isTipActive(input) + ' isTipActive'); //TRUE / FALSE;
})
}
function addTipsClearerOnSubmit() {
$('form').submit(function() {
$(this).find(selectors).each(function() {
var input = $(this);
alert(isTipActive(input)); //UNDEFINED;
if (hasTip(input)) {
if (isTipActive(input)) {
input.val('');
}
}
});
});
}
function setTipInput(input, isTipActive) {
var id = input.attr('id');
//jQuery.data(input, 'isTipActive', isTipActive);
tips[id].isActive = isTipActive;
if (isTipActive) {
input.css('color', opts.inputTipColor);
input.val(tips[id].content);
} else {
input.css('color', opts.inputTextColor);
}
}
function hasTip(input) {
return tips[input.attr('id')] !== undefined;
}
function isTipActive(input) {
var id = input.attr('id');
if (id !== undefined) {
if (tips[id]) {
return tips[id].isActive;
}
}
return false;
}
function isValueNotEqualTipContent(input) {
return input.val().trim() !== tips[input.attr('id')].content.trim();
}
}