2013-03-28 16 views
5

Cóż, to prawie tyle, co się dzieje.

Wszyscy już to widzieliśmy: przycisk staje się aktywny i klikalny dopiero po dodaniu czegoś do pliku wejściowego. Próbuję to zaimplementować. Sądzę, że albo podążyłem w niewłaściwy sposób i powinienem inaczej ustawić selektory jQuery, albo po prostu coś jest nie tak z kodem.

$('textarea').bind({'keyup' : function(){ 
    if ($(this).val().trim().length){ 
     $('.send-feedback').removeClass('inactive').click(function(){ 
      console.log('clicked'); 
     }); 
    } else { 
     $('.send-feedback').addClass('inactive').off('click'); 
    } 
}}) 

Zasadniczo widzę „kliknięciu” w konsoli wiele razy, ale jeśli dodać console.log('key pressed') przed kontrolą if, to wykazanie raz na keydown, jak oczekiwano.

Każda rada?

Odpowiedz

5

Możesz równie dobrze ustawić przycisk na disabled. Zapobiegnie to zdarzenie click z odpaleniem:

if($('textarea').val().trim().length > 0) 
    $('.send-feedback').removeAttr('disabled'); 
else 
    $('.send-feedback').attr('disabled','disabled'); 

Następnie oddzielić funkcję click:

$('textarea').on('input', function(){ ... }); 
$('.send-feedback').on('click', function() { ... }); 

JSFiddle example.

rzeczą jest, to nie jest tak naprawdę guzik, ale <a>

W tym przypadku można użyć klasy, które Załóżmy jest rodzajem co aktualnie robi:

HTML :

<a href="#" class="send-feedback disabled">Click</a> 

JavaScript długość textarea check:

if($(this).val().trim().length > 0) 
    $('.send-feedback').removeClass('disabled'); 
else 
    $('.send-feedback').addClass('disabled'); 

JavaScript kliknięciem funkcja:

$('.send-feedback').on('click', function(e) { 
    e.preventDefault(); 
    if($(this).hasClass('disabled')) 
     return; 

    alert('Clicked!'); 
}); 

JSFiddle example.

2
+0

, który rozwiązuje problem idealnie, dziękuję, przyjmuję odpowiedź, kiedy tylko mogę. –

1

każdym razem wpisać literę (keyup), należy dodać kliknij wydarzenie na numer .send-feedback.

Jeśli masz wiele .send-feedback, musisz

(NBR z znaków w textarea) * (liczba .send-feedback)

razy pojawiają się z "kliknięciu" text.

Zdarzenie click należy dodawać tylko wtedy, gdy klasa .send-feedback jest "nieaktywna".

tutaj:

$('textarea').bind({'keyup' : function(){ 
    if ($(this).val().trim().length) { 
     if ($('.send-feedback').hasClass('inactive')){ 
      $('.send-feedback').removeClass('inactive').click(function(){ 
       console.log('clicked'); 
      }); 
     } 
    } else { 
     $('.send-feedback').addClass('inactive').off('click'); 
    } 
}}) 
+0

Dziękuję za odpowiedź, niestety powtarza się poprzednią :) –

+0

"Powtarza poprzednią", co oznacza, że ​​kod jest niepoprawny, lub powtarza poprzednią odpowiedź (ponieważ jeśli jest to pierwsza, nie wiem gdzie, ale ja mogę to naprawić, na później, no, za późno dla mnie;)) –

+0

Ten, który zaakceptowałem :) –

0

Utworzyłem this fiddle dla ciebie, mam nadzieję, że to pomoże:

To idzie tak:

var el = $(this); 
var btn = $("#btnDoStuff"); 

if(el.val().length > 0) 
    btn.prop("disabled", false); 
else 
    btn.prop("disabled", true); 

Mam nadzieję, że nie zrozumiał problem.

+1

niestety to nie pomaga. dziękuję ci za poświęcony czas –