Точка этого кода состоит в том, чтобы переключаться между двумя версиями innerHTML внутри div, используя входные значения (или значения по умолчанию), а также переключать отображение кнопки. Это не работает. После первого нажатия "новая" кнопка выходит из строя. Предполагается, что div вернется к исходному экрану с пустыми полями ввода.
Я рассмотрел еще несколько вопросов по методу.toggle, но он устарел, и неясно, какое лучшее исправление. По-видимому, не существует большого согласия в отношении подхода. Вот другие темы, которые я нашел для справки:
Вот пример jsfiddle того, что я пытаюсь сделать.
Код HTML:
<div id="case-name">Case Name: In the Matter of <input id="input-petitioner" type="text" placeholder="Petitioner" maxlength="50"></input> and <input id="input-respondent" type="text" placeholder="Respondent" maxlength="50"> <button id="case-name-submit" type="button" value="none">Submit</button></div>
Автор сценария:
$(document).ready(function(){
//EVENT TRIGGERS AND ACTIONS
$('#case-name-submit').on('click', function(){
$('#case-name').fadeOut('fast').html(
'Case Name: In the Matter of ' + $('#input-petitioner').val() + ' and ' + $('#input-respondent').val() + ' <button id="case-name-change" type="button" value="none">Change</button>'
).fadeIn('fast');
});
$('#case-name-change').on('click', function(){
$('#case-name').fadeOut('fast').html(
'Case Name: In the Matter of <input id="input-petitioner" type="text" placeholder="Petitioner" maxlength="50"></input> and <input id="input-respondent" type="text" placeholder="Respondent" maxlength="50"> <button id="case-name-submit" type="button" value="none">Submit</button>'
).fadeIn('fast');
});
});
Поскольку ваши #case-name-submit
и #case-name-change
были добавлены динамически в DOM, все события недоступны для этих двух элементов, поэтому вам нужно использовать делегирование событий здесь, чтобы прикрепить событие click к этим кнопкам:
Делегирование событий позволяет нам присоединить одного прослушивателя событий к родительскому элементу, который будет срабатывать для всех дочерних элементов, соответствующих селектору, независимо от того, существуют ли эти дети сейчас или добавлены в будущем.
$(document).ready(function(){
//EVENT TRIGGERS AND ACTIONS
$('#case-name').on('click', '#case-name-submit', function(){
$('#case-name').fadeOut('fast').html(
'Case Name: In the Matter of ' + $('#input-petitioner').val() + ' and ' + $('#input-respondent').val() + ' <button id="case-name-change" type="button" value="none">Change</button>'
).fadeIn('fast');
});
$('#case-name').on('click','#case-name-change', function(){
$('#case-name').fadeOut('fast').html(
'Case Name: In the Matter of <input id="input-petitioner" type="text" placeholder="Petitioner" maxlength="50"></input> and <input id="input-respondent" type="text" placeholder="Respondent" maxlength="50"> <button id="case-name-submit" type="button" value="none">Submit</button>'
).fadeIn('fast');
});
});
У вас есть динамические элементы, так как вы меняете содержимое, поэтому используйте делегирование событий
$(document).ready(function () {
//EVENT TRIGGERS AND ACTIONS
$('#case-name').on('click', '#case-name-submit', function () {
$('#case-name').fadeOut('fast', function () {
$(this).html(
'Case Name: In the Matter of ' + $('#input-petitioner').val() + ' and ' + $('#input-respondent').val() + ' <button id="case-name-change" type="button" value="none">Change</button>').fadeIn('fast')
});
}).on('click', '#case-name-change', function () {
$('#case-name').fadeOut('fast', function () {
$(this).html(
'Case Name: In the Matter of <input id="input-petitioner" type="text" placeholder="Petitioner" maxlength="50"></input> and <input id="input-respondent" type="text" placeholder="Respondent" maxlength="50"> <button id="case-name-submit" type="button" value="none">Submit</button>').fadeIn('fast')
});
});
});
Также вам нужно обновить html внутри полного обработчика fadeOut
Демо: скрипка