javascript - Yii 2 kartikdialog.prompt 输入类型textarea

标签 javascript yii2 dialog prompt kartik-v

我有一个按钮可以触发 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.prototypedialog.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/

相关文章:

gridview - Yii2:使用 SqlDataProvider 时 GridView 中的 ActionColumn 不起作用

c++ - 在不连接按钮的情况下手动关闭 Modal QDialog - 代码完成后对话框挂起

java - 单击按钮时不显示对话框 - Android

javascript - 在 Javascript 中移动多维数组的最佳方法是什么?

javascript - 如何在 JavaScript 中将 File 对象添加到 FileList 集合?

yii2 - 将 Logo 和标题添加到 NavBar (Yii2)

javascript - jQuery - 对话框的多个实例将无法打开

javascript - [HTML DOM].style 未定义? (html5 应用程序 : address book)

javascript - 未捕获的类型错误 : Cannot set property 'position' of undefined

php - 通过 Yii2 中的链接使用 AJAX 提交时的 CSRF 问题