2014-10-15 4 views
1

У меня есть функция в ветке, которая выбирает некоторые значения из db и отображает selectbox. Я пытаюсь изменить содержимое div. Проблема в том, что с innerHTML {{создает новую строку без цитаты, и это отображается как ошибка. Он не получает поле выбора, потому что у него нет кавычек.Javascript innerhtml не работает с твиковыми тегами

$(document).ready(function() { 
       $type = $("select[name='dtl[USER_TYPE]']"); 

       $type.change(function() { 

        if ($(this).val() == "AUTOR") { 
         var content = '{{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') }}'; 
         document.getElementById("kodi").innerHTML = '"'+ content + '"'; 
        } 
       }); 
      }); 

macros.twig

<select data-placeholder="{{ translate('ZGJIDH_NJE') }}" name="{{ name }}" class="form-control input-sm chosen-select"> 
     <option {% if not options.allowNull %}disabled{% endif %} selected value>{{ translate('ZGJIDH_NJE') }}</option> 
     {% for f in dataset %} 
      <option value="{{ f[kodField] }}" {% if f[kodField] | trim == selectedVal %}selected{% endif %}> 
       {% if f[labelField] %} 
        {{ f[labelField] }} {% if f[kodField] %}&mdash; ({{ f[kodField] }}){% endif %} 
       {% else %} 
        {{ f[kodField] }} 
       {% endif %} 
      </option> 
     {% endfor %} 
    </select> 

EDIT это показано на консоли. {{Создает новую строку без кавычек:

var content = "   
    <select data-placeholder="Zgjidh nje..." name="dtl[USER_TYPE_OBJECT_KOD]" class="form-control input-sm chosen-select"> 
     <option disabled selected value>Zgjidh nje...</option> 
      </select> 
+0

просто оберните 'var content' двойными кавычками и не один – DarkBee

ответ

0

Проблема заключается в том, что ваш синтаксис веточки ломает яваскрипт синтаксиса. Смотрите ниже, просто измените ' на "

   if ($(this).val() == "AUTOR") { 
        var content = '{{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') }}'; 
        document.getElementById("kodi").innerHTML = '"'+ content + '"'; 
       } 

Правильный код:

  if ($(this).val() == "AUTOR") { 
       var content = "{{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') }}"; 
       document.getElementById("kodi").innerHTML = '"'+ content + '"'; 
      } 

Благодаря содержимое вашей продукции JS ломает, а также. U может решить эту проблему, простирающейся прутик:

$filter = new Twig_SimpleFilter('escape_for_js', function ($string) { 
    $needles= array(
     "\n", 
     "\r", 
     '"', 
    ); 
    $replaces = array(
     '', 
     '', 
     '\"', 
    ); 
    return str_replace($needles, $replaces, $string); 
}); 

Добавить этот фильтр в веточке:

$twig = new Twig_Environment($loader); 
$twig->addFilter($filter 

Используя этот фильтр:

var content = "{{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') | escape_for_js }}"; 

Подробнее о расширении прутик here

+0

только что отредактировал мой вопрос с ошибкой, которая отображается в консоли. Даже с ответом – arual

+0

Я вижу. U должен написать фильтр ветви, который заменяет все разрывы строк ничем и все «с помощью» – DarkBee

+0

@jojo добавил пример фильтра – DarkBee

0

Нет необходимости чтобы продлить Twig самостоятельно. Просто используйте json_encode:

var content = {{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') | json_encode }}; 

Обратите внимание на отсутствие кавычек. json_encode добавит их для вас.

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