2012-07-14 12 views
6

Próbuję wyłączyć przycisk przesyłania, dopóki użytkownik nie wypełni pól wejściowych w formularzu.wyłącz przycisk przesyłania, jeśli dane wejściowe są puste przy użyciu jQuery

Znalazłem tutaj wątek THIS, który miał naprawdę dobrą odpowiedź. Mam tylko mały problem z ponownym włączeniem przycisku przesyłania, gdy pola są wypełnione.

Czy ktoś mógłby rzucić okiem na tę funkcję i pomóc mi dowiedzieć się, czego mi brakuje? Każda pomoc będzie mile widziana: D Dziękuję.

Heres a Fiddle również

$(document).ready(function() { 
var $submit = $("input[type=submit]"); 

if ($("input:empty").length > 0) { 
$submit.attr("disabled","disabled"); 
} else { 
$submit.removeAttr("disabled"); 
} 
}); 


<form method="POST" action="<%=request.ServerVariables("SCRIPT_NAME")%>"> 
User Name: <input name="Username" type="text" size="14" maxlength="14" /><br /> 
Password: <input name="last_name" type="password" size="14" maxlength="14"><br /> 
<input type="submit" value="Login" name="Submit" id="loggy"> 
</form> 

Odpowiedz

14
$(document).ready(function() { 
    var $submit = $("input[type=submit]"), 
     $inputs = $('input[type=text], input[type=password]'); 

    function checkEmpty() { 

     // filter over the empty inputs 

     return $inputs.filter(function() { 
      return !$.trim(this.value); 
     }).length === 0; 
    } 

    $inputs.on('blur', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).blur(); // trigger an initial blur 
}); 

Working sample

Zamiast rozmycia można również użyć keyup jak:

$inputs.on('keyup', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).keyup(); // trigger an initial keyup 

także można połączyć wiele zdarzeń:

$inputs.on('keyup blur', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).keyup(); // trigger any one 
+0

Dziękuję bardzo! to działa cudownie: D czy można zmienić rozmycie? więc użytkownik nie musi klikać od danych wejściowych, aby wyłączenie zostało usunięte? – xxstevenxo

+0

@xxstevenxo tak, zobacz moją aktualizację. możesz zrobić z keyupem także – thecodeparadox

+0

nevermind, zmieniłem "blur" na "keypress" i uzyskałem dokładny wynik, na który liczyłem. Jeszcze raz bardzo dziękuję za pomoc i demo! : D – xxstevenxo

1

W swoim pytaniu nie widzę gdzie można sprawdzić stan wejść stale kod, myślę, że problem jest.

Możesz użyć wydarzeń na żywo, aby to zrobić. Korzystanie kod jako przykład:

$(document).ready(function() { 
     var $submit = $("input[type=submit]"); 

     function checkSubmitState() 
     { 
      if ($("input:empty").length > 0) { 
      $submit.attr("disabled","disabled"); 
      } else { 
      $submit.removeAttr("disabled"); 
      } 
     } 

     // check the submit state on every change or blur event. 
     $("input").live("change blur", checkSubmitState); 
}); 
0

użyć zdarzenia keyup sprawdzić wartość przed uruchomieniem warunek:

$(document).ready(function() { 
    $('input:text, input:password').keyup(function() { 
     if ($(this).val() !== "") { 
      $('input:submit').removeAttr('disabled'); 
     } else { 
      $('input:submit').attr('disabled', 'true'); 
     } 
    }); 
}); 

http://jsfiddle.net/tovic/He4Kv/23/

0

niektóre z tych odpowiedzi Oto lil nieaktualne gdy szukałem fragmentu kodu jQuery. Testowałem je i wydaje się, że już nie działają poprawnie z powodu deprecjacji.

Stworzyłem więc własny i tutaj jest nowszy sposób pracy (jQuery> = 3.0), który nasłuchuje na przykład na wejściu.

var inp = $('[type=text]'), 
 
    btn = $('[type=button]') 
 
btn.prop('disabled',true) 
 

 
inp.on('input',() => { 
 
    var empty 
 
    inp.map(v => 
 
    !inp.eq(v).val() ? 
 
     empty = true : false 
 
) 
 
    btn.prop('disabled',empty || false) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
 
<form> 
 
\t <input type=text><br> 
 
\t <input type=text><br> 
 
\t <input type=text><br> 
 
\t <input type=button value=Send> 
 
</form>

zwykły przykład JavaScript jest here.

Powiązane problemy