这是一个Sudoko生成器我用vanilla javascript编程:
Nicer looking full screen fiddle
如果单击其中一个字段,弹出窗口将显示1到9个3x3字段。问题是此弹出窗口不能再关闭,尽管我正在应用关闭对话框。
代码我如何生成 Sudoku board :
val b: Boolean? = null
if (b == null && b) {
println(b)
}
请注意,我将close()函数应用于每个单元格:
val b: Boolean? = null
if (b ?: false) {
println(b)
}
我创建弹出窗口的代码:
// 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();
};
我不知道为什么show()正在运行,但是close()没有?
答案 0 :(得分:3)
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/
答案 1 :(得分:1)
您要隐藏的元素上没有方法close()
。如果你需要隐藏,你应该element.style.display = "none"
。或者执行以下操作:
dialog.addEventListener('click', function() {
this.remove();
});