element.close()在元素上不起作用
vanilla javascript: element.close() not working on element
这是一个数独生成器,我在香草javascript编程:
修改代码
更漂亮的全屏小提琴
如果你点击其中一个字段,一个弹出窗口将显示3x3字段从1到9。问题是这个弹出框不能再关闭了,尽管我正在应用关闭对话框。
生成数独板的代码:
// create sudoku
function tableCreate() {
var body = document.getElementsByClassName("frame")[0];
var containerDiv = body.appendChild(document.createElement('div'))
containerDiv.className = 'container';
// create single cells with numbers
function createInnnerCells(parent, xx, yy) {
for (var x = 1; x <= 3; x++) {
for (var y = 1; y <= 3; y++) {
var abc = function () {
var div = parent.appendChild(document.createElement('div'))
var X = y+yy;
var Y = x+xx;
var id = 'x' + [X] + 'y' + [Y];
var cellValue = sudoku[X][Y]['value'] || '';
div.style.background = sudoku[X][Y]['background'] || 'white'
div.className = 'cell';
div.id = id;
var popover = createDialog(id);
popover.onclick = function() {
popover.close();
};
div.onclick = function() {
popover.show();
};
div.appendChild(popover);
div.appendChild(document.createTextNode(cellValue));
};
abc();
}
}
}
// create big cells for 3x3 single cells
for (var i = 0; i <= 6; i+=3) {
for (var j = 0; j <= 6; j+=3) {
var div = containerDiv.appendChild(document.createElement('div'))
div.className = 'block';
createInnnerCells(div, i, j);
}
}
}
注意,我对每个单元格应用了close()函数:
popover.onclick = function() {
popover.close();
};
创建弹出窗口的代码:
// create dialog
function createDialog(position){
var dialog = document.createElement('dialog');
dialog.id ='window_'+ position;
var dialogblock = dialog.appendChild(document.createElement('div'));
dialogblock.className = 'dialogblock';
for (var z = 1; z <= 9; z++) {
var div = dialogblock.appendChild(document.createElement('div'));
div.className = 'dialogcell';
div.id = position + 'z'+ z;
div.appendChild(document.createTextNode(position));
}
dialog.onclick = function() {
dialog.close();
};
return dialog;
}
我在这里也应用了close()对话框
dialog.onclick = function() {
dialog.close();
};
我不知道为什么show()是工作,但close()不是吗?
DOM事件通过其父节点将DOM冒泡起来。在您的代码中,dialog
是div
的子节点。因此,click
事件发生在dialog
上,然后再次发生在div
上,这意味着您正在关闭然后打开对话框。
您可以使用event.stopPropagation
来停止事件的传播。
你可以这样修改代码:
popover.onclick = function(e) {
e.stopPropagation();
popover.close();
};
和
dialog.onclick = function(e) {
e.stopPropagation();
dialog.close();
};
修改你的小提琴:http://jsfiddle.net/p40oahkd/9/
要隐藏的元素上没有方法close()
。如果你需要隐藏,你应该做element.style.display = "none"
。或者执行以下操作:
dialog.addEventListener('click', function() {
this.remove();
});
查看您的小提琴编辑
相关文章:
- iframe中的jQuery查找元素不起作用
- jQuery选择ajax调用中附加的元素不起作用
- 我的ID获取元素不起作用
- 为什么从 Angular 服务中的对象中删除此元素不起作用
- 将onclick事件附加到元素不起作用
- <标题>插入SVG的元素不起作用
- 使用next()的jQuery目标元素不起作用
- HTML输入元素不起作用
- 使用css显示和隐藏元素不起作用
- 焦点到 DOM 元素不起作用
- Jquery 在图像错误上对多个元素不起作用
- 按类名获取元素不起作用
- jQuery - 'addClass' to HTML 元素 - 不起作用,但在 Chrome 中正确显
- 具有 ID AND 类的 jQuery 选择器目标元素不起作用
- Ajax 对 xml 页面的响应以获取标题元素不起作用
- 单击新 DOM 元素不起作用的事件
- Javascript 添加的动态 svg 元素不起作用
- jQuery on handler 对插入的元素不起作用
- 从表单中删除添加的元素不起作用
- 相对于另一个元素的位置元素不起作用