Когда вы вызываете .click
для элемента, элемент, который был просто выбран (здесь #1
или #2
), подключит слушателя к нему. Если элемент не существует во время выполнения этой строки (например, когда вы пытаетесь присоединиться к #2
), слушатель не будет подключен.
Для вашей ситуации, если вы хотите сделать что-то подобное, вы вместо этого может использовать делегирование событий, чтобы слушатели были подключены к контейнеру :
$(document).on('click', "#1", function() {
$("#1").text("we change the id to 2");
$("#1").attr("id", "2")
console.log('id 1 clicked');
});
$(document).on('click', "#2", function() {
$("#2").text("we change the id to 3");
$("#2").attr("id", "3")
console.log('id 2 clicked');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span id="1">trying to change the id after multiple clic</span>
Другой вариант - сохранить текущий счетчик в переменной, а не в DOM:
const $span = $('span');
const texts = {
2: "click 2",
3: "click 3"
};
let count = 1;
$span.on('click', () => {
count++;
console.log('click', count);
$span.text(texts[count]);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span>trying to change the id after multiple clic</span>