【aui.js的bug】使用aui-dialog.js弹窗模块的prompt功能获取值取值错误

使用aui-dialog.js弹窗模块的prompt功能获取值取值错误

在使用APIcloud开发前端APP时,使用AUI框架的弹窗发现如下问题:

下面是调用的源码:

var dialog = new auiDialog({});
dialog.prompt({
	title: "添加科目",
	text: '科目名称',
	buttons: ['取消', '确定']
}, function(ret) {
	if (ret.buttonIndex == 2) {
		console.log(JSON.stringify(ret)); //这里输出的值是{"buttonIndex":2,"text":"0000-00-00"}
		
	}
});

问题:当我在弹出的输入框中输入值后,回调函数的ret的值,始终都不是我输入的内容,而是取的页面中一个日期输入框(input标签)中的日期

  • 问题分析:
    查看源码:
if(dialogButtons && dialogButtons.length > 0){
                for(var ii = 0; ii < dialogButtons.length; ii++){
                    dialogButtons[ii].onclick = function(){
                        if(callback){
                            if(params.input){
                                callback({
                                    buttonIndex: parseInt(this.getAttribute("button-index"))+1,
                                    text: document.querySelector("input").value
                                });
                            }else{
                                callback({
                                    buttonIndex: parseInt(this.getAttribute("button-index"))+1
                                });
                            }
                        };
                        self.close();
                        return;
                    }
                }
            }

从源码中可以看出,回调函数中取的text的值,是从全文的document中搜索input框取的值,毋庸置疑肯定是会错的。

  • 解决:
    修改源码
  1. 分析查看应该获取的input框的选择框
<div class="aui-mask aui-mask-in"></div>
<div class="aui-dialog aui-dialog-in" style="margin-top: -72px;"><div class="aui-dialog-header">添加科目</div><div class="aui-dialog-body"><input type="text" placeholder="科目名称"></div><div class="aui-dialog-footer"><div class="aui-dialog-btn" tapmode="" button-index="0">取消</div><div class="aui-dialog-btn" tapmode="" button-index="1">确定</div></div></div>
  1. 可以看出源码中input框的selecter应该为.aui-dialog-body input
  2. 修改源码:
 callback({
                                    buttonIndex: parseInt(this.getAttribute("button-index"))+1,
                                    text: document.querySelector(".aui-dialog-body input").value
                                });

你可能感兴趣的:(JavaScript)