在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的使用都没有改变。我要去哪里错了?
我们可以像这样通过缠绕来实现:
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'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句