2016-07-11 15 views
0
<button class="changeMe"> Click Me </button> 
$(".changeMe").on("click", function(){ 
    console.log("I should only work the first time!") 
    $("changeMe").addClass("secondClass").removeClass("changeMe"); 
}); 

$(".secondClass").on("click", function(){ 
    console.log("Now I should Work!") 
}); 

Dies ist im Grunde, was mein Code aussieht.Ändern der Tasten Klassen arbeiten dynamisch nicht

Ich klicke auf den Knopf. Chrome-Entwicklertools zeigen, dass die Klasse entfernt wurde. Ich klicke erneut auf die Schaltfläche, und das gleiche bisschen jQuery-Code läuft, auch wenn die Klasse ihre Pointierung zu dosnt existiert.

Wie kann ich das verhindern?

EDIT :: Ooopss hat den Punkt vergessen. Ich habe den Punkt in meiner Lösung. Dies dient nur zu Demonstrationszwecken. Neuer Punkt

+1

Sie benötigen Ereignis Delegation verwenden, da Sie Klassen manuell ändern. Außerdem wird '.' benötigt, um Klassennamen auszuwählen. – RRK

+2

Sie haben _dot_ vergessen, um die Klasse zu bezeichnen :) –

+0

Sie müssen lernen, wie Selektoren vorher in Jquery arbeiten, verwenden Sie Punkt, um eine Klasse auszuwählen oder #, um nach ID oder sogar eine andere Art von Selektoren auszuwählen, bitte lesen Sie folgenden Link für grundlegende CSS-Selektor: https://api.jquery.com/category/selectors/basic-css-selectors/ – jamesjara

Antwort

0

1) In . vor Klassennamen, so wird es $(".changeMe") und $(".secondClass")

2) Verwenden Sie sein $(document).on("click") Ereignis

Versuchen:

$(document).on("click",".changeMe", function(){ 
 
    console.log("I should only work the first time!") 
 
    $(".changeMe").addClass("secondClass") 
 
    $(".changeMe").removeClass("changeMe"); 
 
}); 
 

 
$(document).on("click",".secondClass", function(){ 
 
    console.log("Now I should Work!") 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 
<button class="changeMe"> Click Me </button>

0

Dieser Code sollte Arbeit

$("body").on("click", '.changeMe', function(){ 
    console.log("I should only work the first time!") 
    $(".changeMe").addClass("secondClass").removeClass("changeMe"); 
}); 

$("body").on("click", '.secondClass', function(){ 
    console.log("Now I should Work!") 
}); 
+0

Yeah, danke – Arif

0

Versuchen Sie dies bei einem Klick auf .secondClass. Sie müssen die Ereignisse dynamisch binden.

$(document).on("click",".secondClass", function(){ 
    console.log("Now I should Work!") 
}); 
0

Sie müssen Ereignisdelegierung verwenden, da Sie Klassen manuell ändern. Auch . wird für die Auswahl von Klassennamen benötigt.

Edit: Statt Ereignis Delegation, können Sie die folgende, binden das Ereignis an die zweite Klasse verwenden, nachdem die Klasse hinzugefügt wird.

Verwenden Sie one() für die Bindung, um nur einmal zu arbeiten.

$(".changeMe").one("click", function(e){ 
 
    console.log("I should only work the first time!") 
 
    $(".changeMe").addClass("secondClass").removeClass("changeMe"); 
 
    $(".secondClass").on("click", function(){ 
 
     console.log("Now I should Work!") 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button class="changeMe"> Click Me </button>

+1

Danke das passt die App perfekt. Vergewissere dich, dass du dich an das .one Ding erinnerst. –

0

Versuchen Sie Folgendes:

$(".changeMe").on("click", function(e){ 

    if($(e.target).is('.changeMe')) { 
    console.log("I should only work the first time!") 
    $(".changeMe").removeClass("changeMe").addClass("secondClass"); 
    } else { 
    console.log("Now I should Work!"); 
    } 
}); 
Verwandte Themen