javascript - 鼠标悬停事件处理程序不工作

标签 javascript jquery html css

因此,我正在尝试使用 jQuery 创建一个程序,该程序基本上会创建一个画板,当鼠标悬停在每个框上时,每个框都会变成红色。

function createGrid(rows, columns){
	var container = '<div id="container"></div>';
	$('body').append(container);
	var row = ('<div class="row"></div>');
	for(var i = 0; i < rows; i++) {
		console.log(i);
		$('#container').append(row);
	}
	var column = ('<div class="square"></div>');
	for(var a = 0; a < columns; a++) {
		$('.row').append(column);
	}
}

function newGrid(){
	$('#container').remove();
	var rows = prompt("How many rows?");
	var columns = prompt("How many columns?");
	createGrid(rows, columns);
}

$(document).ready(function(){
	createGrid(16,16);
	$('#newgrid').on('click', function(){
		newGrid();
	});
	$('.square').on('mouseover', function(){
		$(this).addClass('painted');
	});
});
.square{
	height: 20px;
	width: 20px;
	border: 1px solid black;
	display: inline-block;
	margin-right: 5px;
}

.painted{
	background-color: red;
}

button{
	margin-bottom: 10px;
}
<!doctype html>
<html>
	<head>
		<title>Draw</title>
		<script type="text/javascript" src="jquery-2.1.4.js"></script>
		<script type="text/javascript" src="draw.js"></script>
		<link rel="stylesheet" href="draw.css"/>
	</head>
	<body>
		<button id="newgrid">New Grid</button>
	</body>
</html>

当您单击“新网格”按钮时,网格应适应新的网格大小参数。然而,在那之后,网格没有响应我的鼠标悬停事件。我怎样才能解决这个问题?

最佳答案

重新创建网格后,带有附加事件处理程序的元素将丢失。

每次重新创建网格时都需要重新绑定(bind)事件处理程序:

function createGrid(rows, columns){
    var container = $('<div id="container"></div>'); // make it a jQuery object
    $('body').append(container);
    var row = ('<div class="row"></div>');
    for(var i = 0; i < rows; i++) {
        console.log(i);
        $('#container').append(row);
    }
    var column = ('<div class="square"></div>');
    for(var a = 0; a < columns; a++) {
        $('.row').append(column);
    }
    // attach event handler only to the ancestors of the new container
    // so you don't add additional event handlers to could be existing other grids
    container.find('.square').on('mouseover', function(){ 
        $(this).addClass('painted');
    });
}

你也可以只使用 delegated events :

$(document).on('mouseover', '.square', function(){
    $(this).addClass('painted');
});

在这种情况下,您甚至不需要将其添加到就绪回调中。

关于javascript - 鼠标悬停事件处理程序不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513472/

相关文章:

jquery - 如何将多个表格替换为 Divs?

javascript - 具有最小值和最大值的输入值

jquery - 单选按钮值返回未定义

javascript - 如何用js添加表格?

javascript - 使用渲染将大量数据从路由传递到 Node View 的最佳方法?

javascript - jQuery,remove 并没有删除子元素,只是删除了父元素

javascript - 为什么附加文本区域只适用于 .text 而不是 .val?

java - 自动单击 JavaFX Webview 中的按钮

javascript - 调用带有很多参数的函数会消耗更多内存吗?

javascript - 通过 JS 使用 php 检测用户是否已注销(没有 session ),如果是,则停止执行 JS 函数的其余部分