2010-08-20 14 views
7

Angenommen, ich verwende ein "Platzhalter" jQuery-Plugin, das das "Platzhalter" -Attribut aus Eingabeelementen liest und es für Browser simuliert, die Platzhalter noch nicht unterstützen.Kann ich jQuery .val() nur für einige Eingabeelemente überschreiben?

Aber ich möchte immer noch $ ("input"). Val() ordnungsgemäß funktionieren - das heißt, "" zurückgeben, wenn der Text in dem Textfeld der Platzhaltertext ist. Gibt es da überhaupt eine Möglichkeit, .val() nur für diese Eingänge zu überschreiben?

Antwort

6

versuchen Sie dies:

jQuery.fn.rVal=function() { 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.val()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.val(); 
     } 
    } 
    return undefined; 
}; 

und einfach $ ("# ele_id") verwenden rVal() Werte abzurufen.. Oder wenn Sie die val-Funktion (und es als normal) ersetzen möchten:

jQuery.fn.rVal=jQuery.fn.val; 
jQuery.fn.val=function(value) { 
    if(value!=undefined) { 
     return this.rVal(value); 
    } 
    if(this[0]) { 
     var ele=$(this[0]); 
     if(ele.attr('placeholder')!=''&&ele.rVal()==ele.attr('placeholder')) { 
      return ''; 
     } else { 
      return ele.rVal(); 
     } 
    } 
    return undefined; 
}; 
+0

dies ist der Weg zu gehen beschrieben verhalten. – Ender

+0

Was aber, wenn der Benutzer tatsächlich einen Wert eingibt, der dem Platzhalter entspricht? – RobG

2

Sie können die Methode val() global überschreiben und dann prüfen, ob es sich um einen normalen Eingang handelt.

0

Könnten Sie vielleicht ein Wasserzeichen-Plugin verwenden?

http://code.google.com/p/jquery-watermark/

Es ist ziemlich einfach zu bedienen, einfach $("input").watermark("Placeholder text") nennen, und es wird in der Art und Weise Sie