jQuery first: selector not working after function run once

111 Views Asked by At

When the key down function runs the first time it does what I expect and changes the first class to addBack. Every keypress after that has no effect. html displayed below is after 1 keypress.

html:

 <h1 id="id1">
    <span class="addBack">H</span>
    <span class="noBack">E</span>
    <span class="noBack">L</span>
    <span class="noBack">L</span>
    <span class="noBack">O</span>
 </h1> 

jQuery:

    inputBox.keydown(function() {
    $("span.noBack:first").removeClass("noBack").addClass("addBack");
    });
1

There are 1 best solutions below

0
Richard On BEST ANSWER

Original answer

Seems to work for me just fine:

$('#inputBox').keydown(function() {
    $("span.noBack:first").removeClass("noBack").addClass("addBack");
    });
.addBack { color: green; }
.noBack {color: red;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<h1 id="id1">
    <span class="addBack">H</span>
    <span class="noBack">E</span>
    <span class="noBack">L</span>
    <span class="noBack">L</span>
    <span class="noBack">O</span>
 </h1> 
 
 <input id="inputBox" type="text" />

Is anything else changing besides adding the class? Like changing the input (events) or recreating dom elements so that events get lost?

Edited answer - Something more did seem to happen which caused the problem.

Original fiddle (from comment below question): https://jsfiddle.net/HYUTS/y0jd2zxr/5/.

Fixed fiddle: https://jsfiddle.net/y0jd2zxr/7/.

This line was resetting the content of 'id1' after every keydown event: $('#id1').html(emptyArray);.

If you remove that it works.