我有一个按钮可以触发 kartikdialog.prompt,在其中输入文本。 我需要对话框中的输入具有多行和换行功能(如文本区域)
如何将其从简单的文本输入更改为文本区域?
这是我的 JavaScript:
$("#bulk-email-button-invitations").on("click", function() {
var grid = $("#invitations");
var keys = grid.yiiGridView('getSelectedRows');
if (keys.length >= 1){
krajeeDialog.prompt({label:'Text emailu:', placeholder:'Zadejte text emailu'}, function (result) {
if (result) {
$(location).attr('href', '/educational-event-invitation/bulk-email?' + $.param({invitations: keys, text: result}));
} else {
krajeeDialog.alert('Text emailu nesmí být prázdný!');
}
});
}else{
krajeeDialog.alert("Nejprve vyberte studenty, kterým chcete poslat email!")
}
});
我发现如果未定义类型(与我的情况下的标签和占位符不同),它默认为“文本”。但我无法使对话框呈现除简单的单行文本输入之外的任何类型。
最佳答案
显然,扩展程序不支持这一点。
原因:
原因是在定义了 KrajeeDialog.prototype
的 dialog.js
中,函数 bdPrompt
负责处理要创建的提示对话框,它会将默认字段类型创建为 input
,而不是决定传递给 KrajeeDialog.prompt()
的任何选项或参数,尽管您可以传递名称type
的参数,例如
krajeeDialog.prompt({
label:'Text emailu:',
placeholder:'Zadejte text emailu',
type:'password'
},function(){})
但这并不能决定元素是input
还是textarea
类型,这个参数type
作为属性传递输入元素的
。请参阅下面的代码块以了解我解释第三行将始终创建输入类型字段的原因。
文件yii2-dialog/assets/js/dialog.js
第110行
if (typeof input === "object") {
$inputDiv = $(document.createElement('div'));
$input = $(document.createElement('input'));
if (input['name'] === undefined) {
$input.attr('name', 'krajee-dialog-prompt');
}
if (input['type'] === undefined) {
$input.attr('type', 'text');
}
if (input['class'] === undefined) {
$input.addClass('form-control');
}
$.each(input, function(key, val) {
if (key !== 'label') {
$input.attr(key, val);
}
});
if (input.label !== undefined) {
msg = '<label for="' + $input.attr('name') + '" class="control-label">' + input.label + '</label>';
}
$inputDiv.append($input);
msg += $inputDiv.html();
$input.remove();
$inputDiv.remove();
} else {
msg = input;
}
因此,如果您想以这种方式工作,您可能需要根据您的需要重写 javascript 函数。
关于javascript - Yii 2 kartikdialog.prompt 输入类型textarea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53227027/