2009-06-04 15 views
5

Na stronie HTML mam pole wejściowe, które ma "znak wodny" na nim, gdy jest puste. (np .: "wprowadź tutaj tekst ..."). Rodzaj w ten sposób: http://digitalbush.com/projects/watermark-input-plugin/ - ale niestandardowe napisane.jQuery Wprowadzone znakiem wodnym i sprawdzanie poprawności

Problem polega na tym, że nie mogę wymyślić sposobu sprawdzenia poprawności tego pola za pomocą wtyczki sprawdzania poprawności jQuery (http://docs.jquery.com/Plugins/Validation/), aby traktował mój tekst znaku wodnego tak, jakby pole było puste.

Nie mogę znaleźć opcji w walidatorze jQuery, aby pozwolić mi określić niestandardową regułę, gdy pole jest ważne, czy istnieje? Mogłem znaleźć opcje, które pozwalają mi określić, czy pole musi być sprawdzone na podstawie niestandardowej logiki, ale nie w jaki sposób powinno być sprawdzane.

Czego mi brakuje?

+0

Możliwy duplikat [Jak zrobić pole tekstowe HTML pokazać podpowiedź kiedy pusty?] (Http://stackoverflow.com/questions/108207/how-do-i-make-an-html- text-box-show-a-hint-when-empty) –

Odpowiedz

6

Dzięki Kazar za dostarczenie mi link, wymyśliłem następujące rozwiązanie (jeśli ktoś jest zainteresowany):

function notWatermark(value, element){ 
     return value != 'enter text...'; 
    } 

    $.validator.addMethod("notWatermark", notWatermark, "Field cannot be empty."); 

    $('#SearchForm').validate({ 
     rules: { 
      SomeField: { 
       required: true, 
       notWatermark: true 
      } 
     }, 
+0

Tylko jeden punkt - jeśli ktoś wpisze "wprowadź tekst ..." w polu, co się stanie? Być może lepiej mieć flagę używając klasy elementu? – Kazar

+0

Twoja uwaga jest prawidłowa, ale nie martwię się, że ktoś wprowadzi tekst wpisu ... w polu tekstowym. Podoba mi się efekt uboczny, że nie jest dozwolone. :) – andreialecu

1

Przy zastosowaniu unikalnych etykiet znaku wodnego dla każdego z testboxes (Na przykład „enter imię”,«podaj nazwisko»...), można poprawić skrypt:

function noWatermark(value, element) { 
     return value.toLowerCase() != element.defaultValue.toLowerCase(); 
    } 

$.validator.addMethod("noWatermark", noWatermark, "required."); 

usuwa również tekst sztywno ze skryptu.

5

Używam plugin wodny dla jQuery, ale moja sytuacja była podobna:

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

Używa classname do wyświetlania znaku wodnego. (Nie jestem pewien, czy wersja DigitalBrush używa klasy, czy nie.) Zmodyfikowałem powyższą funkcję, aby użyć funkcji hasClass() jQuery, aby określić, czy pole jest oceniane jako "puste" na podstawie aktualnie przypisanych klas.

function notWatermark(value, element){ 
return !$(element).hasClass("waterMarkClass"); 
} 
$.validator.addMethod("notWatermark", notWatermark, "Required."); 
0

Nie wiem, jak działa wtyczka sprawdzania poprawności, ale jest to osobny moduł, który można użyć.

var SetWatermark = function(oElemToWatermark, sWatermark) 
    { 
     var CheckFocus = function(oEvent) 
     { 
     var oElem = $(this); 

     if (oElem.val() == oElem.data("Watermark")) 
      oElem.val("").css("color", ""); 
     } 

     var CheckBlur = function(oEvent) 
     { 
     var oElem = $(this); 

     if (oElem.val().length == 0) 
      oElem.val(oElem.data("Watermark")).css("color", "Grey"); 
     } 

     // HTML5 (simple route) 
     if (oElemToWatermark[0].placeholder != undefined) 
     oElemToWatermark[0].placeholder = sWatermark; 

     // pre HTML5 (manual route) 
     else if (oElemToWatermark.data("Watermark") == undefined) 
     oElemToWatermark .data("Watermark", sWatermark) 
          .val(sWatermark) 
          .on("focus", CheckFocus) 
          .on("blur", CheckBlur ); 
    } 

    var GetWatermarkText = function(oElem) 
    { 
     if (oElem[0].plaeholder != undefined) 
     return oElem[0].placeholder; 
     else if (oElem.data("Watermark") != undefined) 
     return oElem.data("Watermark"); 
     else 
     { 
     alert("The element " + oElem[0].id + " does not have a Watermark value."); 
     return ""; 
     } 
    } 

    var GetWatermarkValue = function(oElem) 
    { 
     var sVal  = oElem.val(); 
     var sWatermark = oElem.data("Watermark"); 

     if (oElem[0].placeholder != undefined 
     || sWatermark    == undefined 
     || sWatermark    != sVal) 
     return sVal; 
     else if (sVal == sWatermark) 
     return ""; 
    } 
Powiązane problemy