Javascript innerhtml不适用于细枝标记
我在twig中有一个函数,它从db中选择一些值,并显示一个选择框。我正在尝试更改div的内容。问题是,使用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() {
$(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] %}— ({{ 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 }};