我正在制作一个小网站,如果你点击背景,你会得到一个颜色选择器,允许你改变背景颜色。
问题是,由于事件冒泡,无论我在哪里单击,现在都会显示此拾色器。我怀疑这里的解决方案是将"return false“添加到整个页面上的每个HTML元素中。对此我能做些什么呢?
Javascript:
var colorPicker = $.farbtastic('#colorpicker');
var bodyBackgroundColor = $('body').css('background-color').rgbToHex();
$('body').click(function() {
//Set the link to the field displaying the chosen color.
colorPicker.linkTo('#newcolor');
//Set the color on the colorpicker wheel.
colorPicker.setColor(bodyBackgroundColor);
//Set oldcolor field values
$('#oldcolor').val(bodyBackgroundColor);
$('#oldcolor').css('background-color', bodyBackgroundColor);
//Set newcolor field values
$('#newcolor').val(bodyBackgroundColor);
new Boxy($('#form_changecolor'));
return false;
});以下是HTML外观的概述:
<html>
<body>
<div id="wrapper">
<div id="header"></div>
<div id="content"></div>
<div id="footer"></div>
</div>
</body>
<html>页面布局是这样的,页眉和页脚背景以及相同的颜色和内容是不同的。
单击页眉或页脚并更改颜色会同时更改这两种颜色,因为该颜色实际上是正文-背景。内容仅更改内容。
委托解决方案的问题是现在根本不再起作用了。而停止传播方法基本上做了同样的事情。
我需要打开一些传播,但不是全部。
发布于 2011-04-07 03:29:06
您不需要为每个超文本标记语言元素返回false,只需要返回那些冒泡到body的元素,即body的所有子元素。
尝试添加以下内容:
$(function(){
$("body").children().click(function(e){
e.stopPropagation()
});
});所有的点击最终都必须冒泡到body的子节点(或者你点击了body本身),这将阻止它进一步传播。
发布于 2011-04-07 03:10:36
与其自己处理冒泡问题,不如让jQuery来处理:
$('body').delegate('body', 'click', function() {
// your code
});在继续编写代码之前,jQuery代码将验证事件目标是否与选择器("body")匹配。
https://stackoverflow.com/questions/5571629
复制相似问题