Помощь с заменой текста и циклами.
Здравствуйте, помогите пожалуйста разобраться со следующим кодом.
Смысл таков. При замене "описания 1" должно меняться описание 2-1. При нажатии на карандаш, все работает почти хорошо. Но при втором редактировании, также заменяется и первый отредактированный элемент... <div id="viewing_panel"> <div class="field field-slider"> <div class="field-title"> <p>Описание 1</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 3 </p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 4</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 5</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-1</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-2</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-3 </p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-4</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-5</p> </div> </div> </div> $(document).ready(function(){ var $col = $('.field-slider p'); for (var i = 0; i<5; i++) { $('.field-slider p:eq('+i+')').css({"float":"left"}); $('.field-slider p:eq('+i+')').after('<div style="height: 20px;"><img class="newtitle" style="width: 13px;margin: 5px 10px 0 10px; cursor: pointer;float: left;" src="https://png.icons8.com/metro/50/000000/pencil.png"><input class="valuetext" style="margin: 0 0 0 29px; border: 1px solid #d5d5d5; width: 200px; border-radius: 3px; display: none;" type="text"></div>'); } $('#viewing_panel').on('click','.newtitle', function () { $(this).next().css({"display":"block"}); var $elem = $(this).parent().parent(); var $numelem = $('#viewing_panel').find('.field-title p').parent().index($elem); console.log($numelem); $('.valuetext').on('focusout', function(){ var $clac = $numelem+5; $newtext = $(this).val(); $(this).parent().prev().html($newtext); $(this).css({"display":"none"}); console.log($clac); $('.field-title p:eq('+$clac+')').html($newtext); }); }); }); |
lordenas,
меняйте алгоритм, не назначайте в клике никаких обработчиков, если нет желания убить браузер. |
Цитата:
|
Цитата:
|
lordenas,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { var $col = $(".field-slider p"); for (var i = 0; i < 5; i++) { $(".field-slider p:eq(" + i + ")").css({ "float": "left" }); $(".field-slider p:eq(" + i + ")").after('<div style="height: 20px;"><img class="newtitle" style="width: 13px;margin: 5px 10px 0 10px; cursor: pointer;float: left;" src="https://png.icons8.com/metro/50/000000/pencil.png"><input class="valuetext" style="margin: 0 0 0 29px; border: 1px solid #d5d5d5; width: 200px; border-radius: 3px; display: none;" type="text"></div>'); } $("#viewing_panel").on("click", ".newtitle", function() { $(".valuetext").hide(); $(this).next().stop().show(); }).on("focusout", ".valuetext", function() { var index = $(".valuetext").hide().index(this) + 5, $newtext = $(this).val(); $(this).parent().prev().html($newtext); $col.eq(index).html($newtext); }); }); </script> </head> <body> <div id="viewing_panel"> <div class="field field-slider"> <div class="field-title"> <p>Описание 1</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 3 </p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 4</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 5</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-1</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-2</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-3 </p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-4</p> </div> </div> <div class="field field-slider"> <div class="field-title"> <p>Описание 2-5</p> </div> </div> </div> </body> </html> |
Спасибо тебе огромнейшее! Я голову уже голову сломал. Учится, учится и еще раз учится...:victory:
|
lordenas,
Цитата:
Учиться, учиться и еще раз учиться Русский - тоже язык, хоть и не программирования |
Часовой пояс GMT +3, время: 10:23. |