2016-07-11 7 views
0

Dieser Meteor Client Template.abc.events Code versucht, eine Klasse auf alle Eingabeelement anwenden, aber nicht die, die das Ereignis ausgelöst hat.
ich es nicht so, wie kann es behoben werden? Dankwählen Sie alle Eingabeelemente, aber nicht die aktuelle

'click input[name="a.b"]': function(event) { 
    $('input:not($(event.target))').each(function(element) { 
     $(element).addClass('inactive'); 
    }) 
    } 
+0

Sie brauchen nicht '.each () '. Sie können '.addClass' direkt in der Sammlung aufrufen. – Barmar

Antwort

1

$(event.target) ist ein String und wird nicht ausgewertet, es wird als Selektor behandelt werden. Sie können die .not Methode verwenden, die das übergebene Element (e) aus dem Satz schließt:

$('input').not(event.target).each(fn); 

Beachten Sie auch, dass der erste Parameter des .each Rückruf der Index. Ihre each Schleife kann das aktuelle Element der Iteration nicht auswählen. Sie sollten entweder den zweiten Parameter des Rückrufs oder das Schlüsselwort this verwenden. Da jedoch .addClass die Sammlung durchläuft, ist es nicht erforderlich, die Methode .each zu verwenden. Sie können einfach die .addClass am Set anrufen.

0

Versuchen Sie, diese $('input').not(event.target)

0

Sie die input:not(:focus) dafür verwenden können:

$(document).ready(function() { 
    $('input').click(function() { 
     $(this).removeClass('inactive'); 
     $('input:not(:focus)').addClass('inactive'); 
    }); 
}); 

Arbeits Beispiel:

$(document).ready(function() { 
 
    $('input').click(function() { 
 
    $(this).removeClass('inactive'); 
 
    $('input:not(:focus)').addClass('inactive'); 
 
    }); 
 
});
.inactive { 
 
    border: 1px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input /> 
 
<input /> 
 
<input /> 
 
<input />

Verwandte Themen