根据非相关实体动态更改文本字段值

时间:2016-06-03 08:51:58

标签: jquery symfony twig

我有一个CKEditor输入字段来输入消息(使用IvoryCKEditor Bundle),存储在名为Event的实体中。

我还有一个名为Reply的实体,它存储消息原型。

因此,观看者可以直接编写消息,或者通过下拉列表选择消息原型。 View here

回复实体有两个属性:名称和文本。 名称显示在下拉列表中,选中后,我希望在文本字段中设置文本。

我看到了这个:dynamic generation of submitted form,但它只有在我的文本字段所依赖的字段位于表单上时才有效,但事实并非如此。

我想知道我是否可以用Jquery做到这一点。

我必须访问所选Reply实体的text属性,并将其放在textarea字段中。

目前我试过这个,看看我是否可以更改textarea的值。

$("#reply").change(function(){

    $('#message').var("Bonjour");

});

<select id="reply" class="form-control">
    <option>
        {{"tracker.reply.labels.none" | trans | capitalize }}
    </option>
    {% for reply in replies %}
        <option>
            {{reply.name}}
        </option>
    {% endfor %}
</select>

<span id="message" class="col-md-10">
    {{form_errors(formadd.text)}}
    {{form_widget(formadd.text)}}
</span>  

哪个不起作用:$(&#39; #messout&#39;)。var(&#34; bonjour&#34;);什么都不做。 (虽然没有错误)。

我尝试将$(&#34;#message&#34;)替换为$(&#34; .cke-editable&#34;)作为span id =&#34; message&#34;由于CKEditor Wysywig,它包含很多嵌套标签,最终包含这些行:

<body class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" contenteditable="true" spellcheck="false">

   <p>{#text displayed in the field#}</p>

</body>

当然,任何帮助都会受到赞赏,关于

  • 一般情况下如何进行,

  • 如何在JQuery代码中访问Reply的属性,

  • 以及如何更改textarea值。

随意请求更多代码。

谢谢。

1 个答案:

答案 0 :(得分:1)

据我了解,您希望根据select form元素中当前选择的选项替换CKEditor表单元素的内容。

首先,您的选择选项应具有值,因此请在Twig模板中添加它们:

{% for reply in replies %}
    <option value="{{ reply.name }}">
        {{ reply.name }}
    </option>
{% endfor %}

其次,你应该得到你的CKEditor实例:

var editor = CKEDITOR.instances['message']; // or replace 'message' with your ckeditor ID

最后,您可以创建将替换CKEditor内容的jQuery代码,不应使用.var(),使用documentation中的.setData('value')。您可以使用选择选项中的值实现一个简单的switch,这会将文本相应地更改为选定的文本,如下所示:

$(document).ready(function() {
  $('#reply').change(function() {
    switch ($(this).val()) {
      case 'Test1':
        editor.setData('The test text1');
        break;

      case 'Test2':
        editor.setData('The test text2');
        break;

      default:
        editor.setData('');
        break;
    }
  })
});

Here is jsfiddle example of above