javascript - 在 silverstripe CMS 中,按下时在 TextareaField 中添加一个选项卡

标签 javascript php silverstripe

在 silverstripe 中,我需要在 TextareaField 中使用标签 - 目前它会离开该字段,但我希望它在那里写一个标签。

更新根据下面的评论,我添加了这段代码......

_config.yml

TextareaField:
  extensions:
    - TextareaFieldExtension

TextareaFieldExtension.php

class TextareaFieldExtension extends DataExtension {

    public function onBeforeRender() {

        Requirements::customScript(<<<JS
            $(document).delegate('#textbox', 'keydown', function(e) {
              var keyCode = e.keyCode || e.which;

              if (keyCode == 9) {
                e.preventDefault();
                var start = $(this).get(0).selectionStart;
                var end = $(this).get(0).selectionEnd;

                // set textarea value to: text before caret + tab + text after caret
                $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end));

                // put caret at right position again
                $(this).get(0).selectionStart =
                $(this).get(0).selectionEnd = start + 1;
              }
            });
JS
        );
    }
}

我知道正在调用 onBeforeRender,因为我已经使用 die('hello world') 进行了检查。但是,在任何 TextareaField 中使用 Tab 没有变化。我哪里错了?

最佳答案

我们可以像这样用 entwine 实现这一点:

mysite/javascript/cms.js

(function($) {
    jQuery.entwine('ss', function($) {

        $('.field.textarea textarea').entwine({
            onkeydown: function(e) {
                var keyCode = e.keyCode || e.which;

                if (keyCode == 9) {
                    e.preventDefault();
                    var start = $(this).get(0).selectionStart;
                    var end = $(this).get(0).selectionEnd;

                    // set textarea value to: text before caret + tab + text after caret
                    $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end));

                    // put caret at right position again
                    $(this).get(0).selectionStart = $(this).get(0).selectionEnd = start + 1;
                }
            }
        });
    });
})(jQuery);

我们通过将其放入我们的配置 yml 文件中来为所有 CMS 加载此 JavaScript 文件:

mysite/_config/config.yml

LeftAndMain:
  extra_requirements_javascript:
    - 'mysite/javascript/cms.js'

关于javascript - 在 silverstripe CMS 中,按下时在 TextareaField 中添加一个选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188923/

相关文章:

javascript - SlickGrid:重新排序后排序不起作用

php - 在 HTML 中输出 "<"/">"字符

php - JSONP 没有给出任何响应

php - 在 SS CMS 中编辑(以及添加和删除)数组数据的最佳方法是什么?

php - CSS <link> href 丢失前导斜杠,利用 SilverStripe

javascript - 网站如何知道它们不是默认主页或搜索提供商?

javascript - 两个不同屏幕上的垂直滚动

javascript - 内部带有自定义组件的 TouchableWithoutFeedback 不会触发 onPress 回调

PHP 语句 : while($row = mysql_fetch_array($query))

php - Silverstripe:ConfirmedPasswordField 不保存新密码