#javascript #jquery
#javascript #jquery
Вопрос:
Я новичок в jQuery и пытаюсь понять, как повторять функции. Как вы можете видеть из приведенного ниже кода, при нажатии на кнопку она превратится в «Меня щелкнули» в h1, а затем при повторном нажатии она вернется к «Нажмите меня», однако, конечно, после этого она останавливается. Без необходимости постоянно писать эти строки снова и снова, какой самый простой способ повторить это, чтобы каждый раз, когда я нажимаю на него, он менялся?
$("button").click(function() {
$(this).html("<h1>I was clicked</h1>");
$(this).click(function() {
$(this).html("Click Me")
})
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1>Hello</h1>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
Ответ №1:
Вы могли бы написать пару функций для использования в качестве обработчиков событий и назначить другую функцию в качестве обработчика событий при вызове одной из них:
function clickme() {
$(this).html("Click Me");
$(this).off('click').click(clicked);
}
function clicked() {
$(this).html("<h1>I was clicked</h1>");
$(this).off('click').click(clickme);
}
$("button").click(clicked);
<body>
<h1>Hello</h1>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</body>
Комментарии:
1. Используя этот метод, я рекомендую обрезать старые обработчики событий, чтобы они не накапливались , что-то вроде
$(this).off('click').click(...)
. Смoff()
.2. @showdev хороший момент; Я отредактировал, чтобы сделать это.
3. @mikeymike Пожалуйста, посмотрите мое редактирование, оно предотвращает получение кнопками нескольких обработчиков событий (что в конечном итоге может вызвать проблемы с памятью / скоростью)
Ответ №2:
Попробуйте это:
$("button").click(function() {
if ($(this).html().indexOf("I was clicked") == -1)
$(this).html("<h1>I was clicked</h1>");
else
$(this).html("Click Me")
});
<body>
<h1>Hello</h1>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<button>Click Me</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</body>