2015-03-20 2 views
0

enter image description hereВложенные функции в JQuery

Я новичок в Javascript и JQuery. Я пишу следующий код для редактирования части моей веб-страницы. Он работает идеально, когда я нажимаю на #edit_case в первый раз, но после нажатия кнопки #cancel, которая возвращает меня обратно. #edit_case не работает. Что не так с этим фрагментом кода?

$("#edit_case").click(function(){ 

    var oldHTML = $("#editable").html(); 
    var newHTML; 

    newHTML = "<div class='panel-body' id='edit_fields'></div> <div class='panel-footer' id='footer-bottons'></div>" 
    $("#editable").html(newHTML); 
    $('#footer-bottons').html('<div class="text-right"><button class="btn btn-primary btn-sm" id="save">Save</button> <button class="btn btn-default btn-sm" id="cancel">Cancel</button></div>'); 

    $("#cancel").click(function(){ 

     $("#editable").html(oldHTML); 

    }); 
}); 

Мой HTML разметка как:

<div class="panel panel-default" id="editable"> 
    <div class="panel-body"> 
     Drop-down code 
     <li><a id='edit_case'>Edit</a><li> 

     Panel-Body Code... 

    </div> 
Panel footer 
</div> 

При нажатии на Edit, те же текстовые поля ввода появляются как на stackoverflow.com. В первый раз ссылка редактирования работает нормально, но когда я отменю Edit, Edit и Delete не работают. Я думаю, что событие click не происходит, так как я также попробовал проверить его, используя alert ('test'), и он не появился после нажатия на #cancel. Это проблема развязывания события? Если да, то как бы исправить это?

+0

Есть еще элемент с идентификатором edit_case после нажатия кнопки Отмены? – IvanJ

+0

Что это значит: _ ", который возвращает меня обратно из полей" _. Кроме того, _ «#edit_case не работает .. Что не так с этим фрагментом кода?» _ Вы не сказали нам, что он должен делать, поэтому нам сложно рассказать вам, что с ним не так. – JLRishe

+0

Спасибо за комментарии ... Я добавил более подробную информацию об этом .. –

ответ

2

так как кнопка отмены не была в dom сначала, а так как вы удаляете edit_case, вам нужно сделать это с помощью «.on», чтобы этот код был загружен, а не в событии click. если вы поместите его в событие click, у вас будет несколько событий, которые будут зарегистрированы.

с рабочей скрипкой: https://jsfiddle.net/2hjr6g94/

$(document).on('click','#cancel',function(){ 
     $("#editable").html(oldHTML); 
    }); 

var oldHTML = $("#editable").html(); 

$(document).on('click','#edit_case',function(){ 
    var oldHTML = $("#editable").html(); 
    var newHTML; 

    newHTML = "<div class='panel-body' id='edit_fields'></div> <div class='panel-footer' id='footer-bottons'></div>" 
    $("#editable").html(newHTML); 
    $('#footer-bottons').html('<div class="text-right"><button class="btn btn-primary btn-sm" id="save">Save</button> <button class="btn btn-default btn-sm" id="cancel">Cancel</button></div>'); 

}); 
+0

Это правда, и я не думал, что это так. Или вы могли бы использовать «живое» связующее, не так ли? – Casey

+0

Никаких эффектов с этим решением. –

+0

@HassanSaqib Я бы предположил, что вы удалили селектор id и вместо этого использовали селектор классов. Поскольку вы добавляете динамическую информацию, ваш код может использоваться более одного раза. Не уверен, что он решит вашу проблему, но ... можете ли вы добавить jsfiddle? – Hemadeus

1

После запуска один раз новый html находится в переменной значения «oldHtml». Вам нужно хранить старый HTML вне этой функции, поэтому он сохраняется.

Вот процесс вы делаете прямо сейчас:

  1. Получить HTML.
  2. Загрузить новый html.
  3. Получить html (теперь новый html).
  4. load старыйHtml (все еще новый html).

oldHtml получает переопределение и сохраняется каждый раз, когда вызывается эта функция.

+0

Спасибо Кейси за ответ. OldHtml сохраняется в моем случае. Я добавил дополнительные сведения об этом. –

Смежные вопросы