Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 11.08.2016, 19:41
Интересующийся
Отправить личное сообщение для taravasya Посмотреть профиль Найти все сообщения от taravasya
 
Регистрация: 07.04.2014
Сообщений: 13

Подскажите пожалуйста как правильно реализовать:
Есть страница сайта, данные которой выводятся с помощью PHP из MySQL(ну вообщем vBulletin).
Для возможности очень быстрого редактирования, прикрутил java-скриптик, который при двойном клике по элементу, с помощью PHP(Ajax), запрашивает и выводит в элемент содержимое в том виде, в каком оно хранится в БД и после этого присваивает элементу атрибут contenteditable. Соответственно, после редактирования на onblur, отправляет содержимое элемента, как текст, обратно в соответствующее поле таблицы в БД.
Вот сам скрипт:
function quickEditTag(editableID) {
	var $currentDlFile;
	var $currentDlFile = $("#dlfile_" + editableID);
	$currentDlFile.load("downloads_ajax.php?&ajaxedit=" + editableID);
	document.getElementById("dlfile_" + editableID).contentEditable = true;
	$currentDlFile.on('blur', function() {
		$.post(
		"/downloads_ajax.php?&ajaxedit=0",
			{
				dl2fileId: editableID,
				dl2filemessage: $currentDlFile.text()
			},
		onAjaxSuccess
		);
		function onAjaxSuccess(data)
		{
			//alert(data);
		}
		document.getElementById("dlfile_" + editableID).contentEditable = false;
	});
}

Код PHP не привожу, там в принципе всё стандартно(только непосредственно во время SET в MySQL проверяется и если надо конвертируется кодировка(а то заметил, что иногда возникают затыки с русскими символами)).
Всё работает зачемятельно, за исключением того, что после редактирования, при отправке назад в БД, игнорируются переносы строки. Не подскажите, как правильно "побороть" это?
Ответить с цитированием
  #22 (permalink)  
Старый 11.08.2016, 19:59
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от taravasya
иногда возникают затыки с русскими символами
Значит либо сервер и клиент работают в разных кодировках, либо некорректна или вообще не устанавливается кодировка соединения с базой.

Сообщение от taravasya
игнорируются переносы строки.

В чем это выражается?
Ответить с цитированием
  #23 (permalink)  
Старый 11.08.2016, 20:12
Интересующийся
Отправить личное сообщение для taravasya Посмотреть профиль Найти все сообщения от taravasya
 
Регистрация: 07.04.2014
Сообщений: 13

Спасибо за ответ!
Сообщение от laimas
Значит либо сервер и клиент работают в разных кодировках
Да вроде не замечалось раньше такого... Я с булкой уже давно.. умею настраивать под неё всё... Затык возникает только при использовании моего скрипта. Но это не важно.. )))
Сообщение от laimas
В чем это выражается?
Как я писал ранее, после редактирования текста в contenteditable див-е, по событию onblur, имеющееся содержимое, отправляется в БД. Например, я написал вот такой текст:
Это мой текст. Это:
мой текст.

А в БД он сохраняется так:
Это мой текст. Это:мой текст.
При этом, очень важный момент, если в тексте УЖЕ были переносы, до ajax-редактирования, то они сохраняются.
Ответить с цитированием
  #24 (permalink)  
Старый 11.08.2016, 20:16
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Видишь, как простое на этапе выбора решение, оборачивается полной задницей на этапе реализации. С простыми решениями всегда такая засада. Теперь ты захотел кросс-браузерный конвертер переносов, потом с кодировками и хтмлем геморрой. И это все, вместо того, чтобы подставлять обычный textarea и по тем же каналам и с теми же скриптами все посылать и обрабатывать.

Атрибут contenteditable придуман не для таких задач. Это вот когда ты можешь отредактировать веб-страницу, чтобы сохранить ее как в файл, или отправить на печать, или сделать снимок. Но точно не для ввода текста.
Ответить с цитированием
  #25 (permalink)  
Старый 11.08.2016, 20:21
Интересующийся
Отправить личное сообщение для taravasya Посмотреть профиль Найти все сообщения от taravasya
 
Регистрация: 07.04.2014
Сообщений: 13

warren buffet,
Ну... таки работает )) Эта возможность будет только у админов форума. То-есть это не рабочий вариант. Но есть контент, в довольно большом количестве, который нужно править. Я не придумал ничего лучше чем это.
А Вы имеете ввиду, что лучше, по двойному клику преобразовать div в textarea и при потере им фокуса снова возвращать в div?
Сообщение от warren buffet
кросс-браузерный конвертер переносов
да в принципе только хром интересует....
Ответить с цитированием
  #26 (permalink)  
Старый 11.08.2016, 20:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от taravasya
А в БД он сохраняется так:
Это мой текст. Это:мой текст.
Это вы смотрите в РМА или же на страницах сайта?:
Ответить с цитированием
  #27 (permalink)  
Старый 11.08.2016, 20:32
Интересующийся
Отправить личное сообщение для taravasya Посмотреть профиль Найти все сообщения от taravasya
 
Регистрация: 07.04.2014
Сообщений: 13

laimas,
И там и там выглядит так. На странице естественно только после обновления. А в БД именно без переноса и сохраняется.
Ответить с цитированием
  #28 (permalink)  
Старый 11.08.2016, 20:41
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от taravasya
Ну... таки работает
Если работает, ты зачем сюда пришел?
Ответить с цитированием
  #29 (permalink)  
Старый 11.08.2016, 20:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

$currentDlFile.text() - а надо html получать. Но учтите, это будет BR.

PS. Зачем для простого текста использовать contenteditable, а не просто textarea?
Ответить с цитированием
  #30 (permalink)  
Старый 11.08.2016, 20:46
Интересующийся
Отправить личное сообщение для taravasya Посмотреть профиль Найти все сообщения от taravasya
 
Регистрация: 07.04.2014
Сообщений: 13

Сообщение от laimas
надо html получать
Тогда всё вообще не правильно сохранятеся, потому как тогда:
Сообщение от laimas
это будет BR
))))))
Сообщение от laimas
Зачем
Просто недопетрил вовремя... Я тот ещё программер ))
Сообщение от laimas
Зачем для простого текста использовать contenteditable, а не просто textarea?
ОК. Пошёл в нэт )), тем более, что "сосед сверху" о том же говорит...
Вот вариант:
http://jsfiddle.net/GeJkU/
я так понимаю это оно?
ЗЫ///Всем спасибо за подсказки!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS против jquery. Раскрасить четные строки eXtreme Общие вопросы Javascript 13 02.06.2015 14:46
Перевод на новую строку JS воспринимает как объект DOM Rig Events/DOM/Window 6 26.12.2011 20:08
Регулярное выражение: любой символ, включая перевод строки Gleb Общие вопросы Javascript 3 28.07.2011 12:15
Не работает js, длина строки undefined vvsh Общие вопросы Javascript 6 31.10.2009 16:36
помогите написать аналог строки include("index.php?open=1") на js bushstas Общие вопросы Javascript 1 19.07.2009 02:48