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();
    }
}