Javascript innerhtml不适用于细枝标记

Javascript innerhtml不适用于细枝标记,javascript,jquery,twig,innerhtml,Javascript,Jquery,Twig,Innerhtml,我在twig中有一个函数,它从db中选择一些值,并显示一个选择框。我正在尝试更改div的内容。问题是,使用innerHTML{{会创建一个没有引号的新行,这显示为错误。它不会获得选择框,因为它没有引号 $(document).ready(function() { $type = $("select[name='dtl[USER_TYPE]']"); $type.change(function() {

我在twig中有一个函数,它从db中选择一些值,并显示一个选择框。我正在尝试更改div的内容。问题是,使用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 + '"';
                   }
               });
           });
微枝

<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>
编辑 这在控制台中显示。{{创建一个不带引号的新行:

 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>

问题是你的小树枝语法破坏了javascript语法。请看下面,只需将“更改为”

正确代码:

           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也会中断。您可以通过扩展twig来解决此问题:

$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 }}";

有关扩展细枝的详细信息

无需自己扩展细枝。只需使用:


请注意缺少引号。json_encode将为您添加引号。

只需将var内容用双引号括起来,而不是单引号。只需编辑控制台中显示的带错误的我的问题。即使有您的回答,我也看到了。您应该编写一个细枝过滤器,将所有换行符替换为空,并使用\@jojo添加了一个示例过滤器
var content = "{{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') | escape_for_js }}";
var content = {{ mm.select(holdersdata, data.USER_TYPE_OBJECT_KOD, 'dtl[USER_TYPE_OBJECT_KOD]') | json_encode }};