2013-03-18 15 views
49

Mam następujący przykład:jQuery sprawdzić czy <input> istnieje i ma wartość

<input type="text" class="input1" value="bla"/> 

Czy istnieje sposób, aby sprawdzić, czy ten element istnieje i ma wartość w jednej instrukcji? Albo przynajmniej coś krótszy następnie

if($('.input1').length > 0 && $('input1').val() != '') 

Wystarczy udaremniony dojazd z warunkami mili długości.

+0

Może wykonać funkcję pomocnika, jeśli wielokrotnie używasz tego samego warunku. – mirrormx

+1

if ($ (selector) .val()) powinno działać. Jeśli element nie istnieje, zwróci wartość "undefined", a jeśli nie ma żadnej długości, zwróci wartość "" (która jest wartością false). – Benmj

+0

@Benmj będzie "niezdefiniowany" również ocenić jako fałszywy? Myślałem, że nie. – Dimskiy

Odpowiedz

100

wejście nie będzie miał wartość, jeśli nie istnieje. Wypróbuj to ...

if($('.input1').val()) 
+0

Skończyłem na pisaniu kilku małych funkcji, ale ten przykład również został użyty. – Dimskiy

+3

@Christian: input1 nie jest znacznikiem html w powyższej odpowiedzi, ale jest klasą. –

+3

Nie kończę zgadzam się ufać atrybutowi wartości elementu wejściowego. Może czasami być pusta (bez wartości wewnątrz), ale nadal być obecna w zakresie. Najlepiej jest polegać na $ ('. Input1'). Length> 0, a następnie wykonać dowolne przetwarzanie. –

17

Można zrobić:

if($('.input1').length && $('.input1').val().length) 

length ocenia się false w warunkach, gdy wartość jest 0.

+0

Downvote bez komentarza? czemu? –

+0

@MarkWalters: Tutaj nie ma żadnego komentarza, ale nie jest to znaczące ulepszenie w stosunku do oryginału. –

+0

Przygotuję ci Curt. Dodanie. Długości jest moim wyborem. –

12

można zrobić coś takiego:

jQuery.fn.existsWithValue = function() { 
    return this.length && this.val().length; 
} 

if ($(selector).existsWithValue()) { 
     // Do something 
} 
5

Zrobiłem to za pomocą kodu jQuery. Funkcja .val() obecnie zaczyna się od linii 165 z attributes.js. Oto odpowiedni rozdział z moich adnotacji:

val: function(value) { 
    var hooks, ret, isFunction, 
     elem = this[0]; 

     /// NO ARGUMENTS, BECAUSE NOT SETTING VALUE 
    if (!arguments.length) { 

     /// IF NOT DEFINED, THIS BLOCK IS NOT ENTERED. HENCE 'UNDEFINED' 
     if (elem) { 
      hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 

      if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { 
       return ret; 
      } 

      ret = elem.value; 

      /// IF IS DEFINED, JQUERY WILL CHECK TYPE AND RETURN APPROPRIATE 'EMPTY' VALUE 
      return typeof ret === "string" ? 
       // handle most common string cases 
       ret.replace(rreturn, "") : 
       // handle cases where value is null/undef or number 
       ret == null ? "" : ret; 
     } 

     return; 
    } 

Tak, to albo dostać undefined lub "" lub null - wszystko ocenić jako fałszywe, jeśli sprawozdania.

-1

Zrobiłbym coś takiego: $('input[value]').something. Znajduje wszystkie dane wejściowe, które mają wartość i działają na nich.

Powiązane problemy