Перейти к содержимому


Пропали кнопки редактирования/сохранения записи


Сообщений в теме: 3

#1 arsenal

    Активный участник

  • Пользователи
  • PipPipPip
  • 448 сообщений

Отправлено 16 Август 2011 - 16:41

Написал код JS для поля в одной из таблиц, который скрывает/показывает поля при определенном значении поля. При просмотре результата перестали выводиться колонка с кнопками "сохранить, копировать, удалить и.т.д.", т.е. пропали ВСЕ кнопки редактирования. Убрал код JS из поля - кнопки появились. В результате экспериментов выяснил, что на исчезновение кнопок повлиял следующий кусок кода
  if (document.getElementById('value1267').value==1) {display_field(1261,1);}
elseif (document.getElementById('value1267').value!=1 && document.getElementById('value1326').value=="ДА")
      {display_field(1261,1);}
 

Причем комментирование это кода не помогает - кнопки все равно исчезают. Если этот код удалить совсем - то кнопки появляются.
При дальнейших экспериментах выяснил, что непосредственно на исчезновение кнопок влияет наличие фигурных кавычек {display_field(1261,1);}
Если их убрать, то все нормально.
Как код JS, пусть даже неправильный (хотя фигурные кавычки здесь вроде бы стоят правильно), может влиять на программу?

Сообщение отредактировал arsenal: 16 Август 2011 - 17:05


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Август 2011 - 09:02

JS тут не причем. Дело в том что код JS вставляется внутрь Smarty шаблона страницы, и интерпретируется им (поэтому в частности можно использовать в коде переменные Smarty, например {$one_field.id}). Побочным эффектом является то что вы не можете использовать фигурные скобки JS внутри строки, т.к. Smarty пытается их интерпретировать как свои переменные или инструкции. Поэтому необходимо либо использовать отдельно стоящие скобки, либо заменять их на инструкции {ldelim} и {rdelim} соответственно. Хотя в вашем примере они вообще не нужны, т.к. после условий идет по одной инструкции:

if (document.getElementById('value1267').value==1)
	display_field(1261,1);
elseif (document.getElementById('value1267').value!=1 && document.getElementById('value1326').value=="ДА")
	display_field(1261,1);


#3 arsenal

    Активный участник

  • Пользователи
  • PipPipPip
  • 448 сообщений

Отправлено 08 Ноябрь 2011 - 08:30

Заметил такую особенность (версия 1.9.4).
Если открывающая фигурная скобка какой-либо конструкции (например, if) стоит в первой строке
if (условие) {
	выражения }
то кнопки просмотра/редактирования не пропадают.
Если открывающую скобку поставить в другом месте, например
if (условие) 
	{ выражения }
ИЛИ
if (условие) { выражения }
то кнопки просмотра/редактирования пропадают.

#4 Analitic

    Активный участник

  • Пользователи
  • PipPipPip
  • 700 сообщений
  • Пол:Мужчина

Отправлено 08 Ноябрь 2011 - 09:37

В Javascript вы можете использовать smarty конструкции. Smarty задается именно через фигурные скобки, например {$table_id} - id таблицы. Поэтому необходимо между скобками и текстом использовать пробел, чтобы конструкция не интерпретировалась как тег smarty.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных