Помощь с заменой текста и циклами.
Здравствуйте, помогите пожалуйста разобраться со следующим кодом.
Смысл таков. При замене "описания 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, время: 08:11. |