镀金与化金有啥区别。他们俩者用在做PCB上那样好一点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了镀金与化金有啥区别。他们俩者用在做PCB上那样好一点相关的知识,希望对你有一定的参考价值。
参考技术A 镀金指的是电镀金,即工件作为阴极(这里指PCB板)在直流电的作用下金离子在工件表面放电,逐步形成金电镀层;化金指的是化学镀金,即无需外电源,仅靠镀液进行化学还原反应,使金属离子不断还原在工件表面上,形成金镀层。两者在PCB板上的应用各有特点,电镀金可以得到较大的镀层厚度和不同的硬度,既可以用在插头部分以提高耐磨性能(硬金),也可用在导线或其他导电部分。因为是要通电,PCB板应预留工艺导线,电镀结束后才能去除,工序上比较麻烦;化金不能镀较大的厚度,大多用在对金层要求不高的线路部分,不需预留工艺导线,加工简单,效率高、成本低,较适合大批量生产。本回答被提问者和网友采纳event.stopPropagation 和 event.preventDefault 有啥区别?
【中文标题】event.stopPropagation 和 event.preventDefault 有啥区别?【英文标题】:What's the difference between event.stopPropagation and event.preventDefault?event.stopPropagation 和 event.preventDefault 有什么区别? 【发布时间】:2011-08-23 05:58:40 【问题描述】:他们似乎在做同样的事情...... 一个现代的,一个古老的?或者它们是否被不同的浏览器支持?
当我自己处理事件(没有框架)时,我总是检查两者并执行两者(如果存在)。 (我也是return false
,但我感觉不适用于node.addEventListener
附加的事件)。
那么为什么两者都有?我应该继续检查两者吗?还是真的有区别?
(我知道,有很多问题,但它们都差不多=))
【问题讨论】:
【参考方案1】:stopPropagation
防止在捕获和冒泡阶段进一步传播当前事件。
preventDefault
阻止浏览器对该事件执行默认操作。
示例
preventDefault
$("#but").click(function (event)
event.preventDefault()
)
$("#foo").click(function ()
alert("parent click event fired!")
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
停止传播
$("#but").click(function (event)
event.stopPropagation()
)
$("#foo").click(function ()
alert("parent click event fired!")
)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
对于stopPropagation
,只有button
的点击处理程序 被调用,而div
的点击处理程序 永远不会触发。
如果你使用preventDefault
,只有浏览器的默认操作会停止,但 div 的点击处理程序仍然会触发。
以下是来自 MDN 的关于 DOM 事件属性和方法的一些文档:
event.cancelBubble
event.preventDefault()
event.returnValue
event.stopPropagation()
对于 IE9 和 FF,您可以使用 preventDefault 和 stopPropagation。
要支持 IE8 及更低版本,请将 stopPropagation
替换为 cancelBubble
并将 preventDefault
替换为 returnValue
【讨论】:
所以他们有很大的不同? IE 是否也有两种不同的事件方法? (它们可能是一样的吗??)框架在它们的event.stop
函数中都这样做很奇怪......也很奇怪,我从来没有遇到过这个问题。我经常使用冒泡。谢谢你的例子!
值得注意的是(如果你不看 MSDN 文档)cancelBubble
和returnValue
都是属性(所以应该设置cancelBubble = true;
),而preventDefault
和stopPropagation
是方法(所以应该叫preventDefault();
)
@Raynos,请注意:event.stopPropagation() 不仅可以阻止事件在事件链中冒泡,还可以在捕获阶段停止事件传播 (developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation)跨度>
了解按钮单击的默认操作会很有帮助,这样我就可以推断为什么stopDefault()
与stopPropagation()
的工作方式不同。如果默认操作没有调用onclick
方法,那是什么?
按钮的默认浏览器行为是什么?【参考方案2】:
术语
来自quirksmode.org:
事件捕获
当你使用事件捕获时
| | ---------------| |----------------- |元素1 | | | | ------------| |----------- | | |元素2 \ / | | | ------------------------------------- | |事件捕捉 | ----------------------------------element1 的事件处理器最先触发,element2 的事件处理器最后触发。
事件冒泡
当你使用事件冒泡时
/ \ ---------------| |----------------- |元素1 | | | | ------------| |----------- | | |元素2 | | | | | ------------------------------------- | |事件冒泡 | ----------------------------------element2 的事件处理器最先触发,element1 的事件处理器最后触发。
在 W3C 事件模型中发生的任何事件都会首先被捕获,直到它到达目标元素,然后再次冒泡。
| | / \ -----------------| |--| |----------------- |元素1 | | | | | | -------------| |--| |----------- | | |元素2 \ / | | | | | -------------------------------- | | W3C 事件模型 | ------------------------------------------
界面
来自w3.org,用于事件捕获:
如果捕获
EventListener
希望阻止进一步处理 发生的事件可能会调用stopPropagation
的方法Event
接口。这将阻止事件的进一步发送, 尽管在同一层次结构中注册了额外的EventListeners
级别仍然会收到该事件。一旦一个事件的stopPropagation
方法已被调用,对该方法的进一步调用没有 附加效果。如果没有额外的捕获器存在并且stopPropagation
未被调用,事件触发 在目标本身上适当的EventListeners
。
对于事件冒泡:
任何事件处理程序都可以选择通过以下方式阻止进一步的事件传播 调用
Event
接口的stopPropagation
方法。如果有的话EventListener
调用这个方法,所有额外的EventListeners
就在 当前的EventTarget
将被触发,但冒泡将停止 等级。只需致电stopPropagation
即可防止进一步 冒泡。
对于事件取消:
通过调用
Event
的preventDefault
来完成取消 方法。如果有一个或多个EventListeners
在此期间致电preventDefault
事件流的任何阶段都将取消默认操作。
示例
在以下示例中,单击 Web 浏览器中的超链接会触发事件流(执行事件侦听器)和事件目标的默认操作(打开新选项卡)。
HTML:
<div id="a">
<a id="b" href="http://www.google.com/" target="_blank">Google</a>
</div>
<p id="c"></p>
JavaScript:
var el = document.getElementById("c");
function capturingOnClick1(ev)
el.innerHTML += "DIV event capture<br>";
function capturingOnClick2(ev)
el.innerHTML += "A event capture<br>";
function bubblingOnClick1(ev)
el.innerHTML += "DIV event bubbling<br>";
function bubblingOnClick2(ev)
el.innerHTML += "A event bubbling<br>";
// The 3rd parameter useCapture makes the event listener capturing (false by default)
document.getElementById("a").addEventListener("click", capturingOnClick1, true);
document.getElementById("b").addEventListener("click", capturingOnClick2, true);
document.getElementById("a").addEventListener("click", bubblingOnClick1, false);
document.getElementById("b").addEventListener("click", bubblingOnClick2, false);
Example 1: 结果是输出
DIV event capture
A event capture
A event bubbling
DIV event bubbling
Example 2:将stopPropagation()
添加到函数中
function capturingOnClick1(ev)
el.innerHTML += "DIV event capture<br>";
ev.stopPropagation();
输出结果
DIV event capture
事件侦听器阻止了事件的进一步向下和向上传播。但是它并没有阻止默认操作(打开新标签页)。
Example 3:在函数中添加stopPropagation()
function capturingOnClick2(ev)
el.innerHTML += "A event capture<br>";
ev.stopPropagation();
或函数
function bubblingOnClick2(ev)
el.innerHTML += "A event bubbling<br>";
ev.stopPropagation();
输出结果
DIV event capture
A event capture
A event bubbling
这是因为两个事件侦听器都注册在同一个事件目标上。事件侦听器阻止了事件的进一步向上传播。但是,它们并没有阻止默认操作(打开新标签页)。
Example 4:例如将preventDefault()
添加到任何函数中
function capturingOnClick1(ev)
el.innerHTML += "DIV event capture<br>";
ev.preventDefault();
阻止新标签页打开。
【讨论】:
感谢捕获和冒泡之间更深层次的区别,而其他答案仅解决 jQuery 问题。【参考方案3】:返回假;
return false;
在你调用它时会做 3 件不同的事情:
event.preventDefault()
– 它停止浏览器的默认行为。
event.stopPropagation()
– 它防止事件传播(或“冒泡”)DOM。
停止回调执行并在调用时立即返回。
请注意,此行为与普通(非 jQuery)事件处理程序不同,其中值得注意的是,return false
不会阻止事件冒泡。
preventDefault();
preventDefault();
做了一件事:它停止浏览器的默认行为。
何时使用它们?
我们知道它们的作用,但何时使用它们?简单地说,这取决于你想要完成什么。如果您想“只是”阻止默认浏览器行为,请使用 preventDefault();
。使用返回假;当您想要阻止默认浏览器行为并阻止事件传播 DOM 时。在大多数情况下,您会使用 return false;你真正想要的是preventDefault()
。
示例:
让我们试着用例子来理解:
我们将看到纯 JAVASCRIPT 示例
示例 1:
<div onclick='executeParent()'>
<a href='https://***.com' onclick='executeChild()'>Click here to visit ***.com</a>
</div>
<script>
function executeChild()
alert('Link Clicked');
function executeParent()
alert('div Clicked');
</script>
运行上面的代码你会看到超链接‘点击这里访问 ***.com‘ 现在,如果您先单击该链接,您将获得 javascript alert Link Clicked 接下来你会得到 javascript 警报 div Clicked 并立即将您重定向到 ***.com。
示例 2:
<div onclick='executeParent()'>
<a href='https://***.com' onclick='executeChild()'>Click here to visit ***.com</a>
</div>
<script>
function executeChild()
event.preventDefault();
event.currentTarget.innerHTML = 'Click event prevented'
alert('Link Clicked');
function executeParent()
alert('div Clicked');
</script>
运行上面的代码你会看到超链接‘点击这里访问 ***.com‘现在如果你先点击那个链接你会得到 javascript alert Link Clicked 接下来你会得到 javascript alert div Clicked 接下来你会看到超链接“点击这里到 访问 ***.com 替换为文本“阻止点击事件” 您将不会被重定向到 ***.com。这是由于我们用来防止默认点击的 event.preventDefault() 方法 要触发的操作。
示例 3:
<div onclick='executeParent()'>
<a href='https://***.com' onclick='executeChild()'>Click here to visit ***.com</a>
</div>
<script>
function executeChild()
event.stopPropagation();
event.currentTarget.innerHTML = 'Click event prevented'
alert('Link Clicked');
function executeParent()
alert('div Clicked');
</script>
这一次如果你点击 Link 函数 executeParent() 将不会 被调用,你不会得到 javascript 警报 div Clicked 这次。这是因为我们阻止了传播到 使用 event.stopPropagation() 方法的父 div。接下来你会看到 超链接“点击此处访问***.com”替换为文本 ‘点击事件将被执行’,您将立即 重定向到 ***.com。这是因为我们没有阻止 这次使用触发的默认点击操作 event.preventDefault() 方法。
示例 4:
<div onclick='executeParent()'>
<a href='https://***.com' onclick='executeChild()'>Click here to visit ***.com</a>
</div>
<script>
function executeChild()
event.preventDefault();
event.stopPropagation();
event.currentTarget.innerHTML = 'Click event prevented'
alert('Link Clicked');
function executeParent()
alert('Div Clicked');
</script>
如果你点击链接,函数 executeParent() 将不会 调用,您将不会收到 javascript 警报。这是由于我们 使用阻止传播到父 div event.stopPropagation() 方法。接下来你会看到超链接‘点击 在这里访问 ***.com 被文本“点击事件”替换 阻止',您将不会被重定向到 ***.com。这 是因为我们阻止了默认的点击动作触发 这次使用 event.preventDefault() 方法。
示例 5:
对于 return false,我有三个示例,所有示例似乎都在做完全相同的事情(只是返回 false),但实际上 结果大相径庭。以下是每个实际发生的情况 以上。
案例:
-
从内联事件处理程序返回 false 会阻止浏览器导航到链接地址,但不会阻止事件通过 DOM 传播。
从 jQuery 事件处理程序返回 false 会阻止浏览器导航到链接地址并阻止事件通过 DOM 传播。
从常规 DOM 事件处理程序返回 false 绝对没有任何作用。
将看到所有三个示例。
-
内联返回 false。
<div onclick='executeParent()'>
<a href='https://***.com' onclick='return false'>Click here to visit ***.com</a>
</div>
<script>
var link = document.querySelector('a');
link.addEventListener('click', function()
event.currentTarget.innerHTML = 'Click event prevented using inline html'
alert('Link Clicked');
);
function executeParent()
alert('Div Clicked');
</script>
-
从 jQuery 事件处理程序返回 false。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<a href='https://***.com'>Click here to visit ***.com</a>
</div>
<script>
$('a').click(function(event)
alert('Link Clicked');
$('a').text('Click event prevented using return FALSE');
$('a').contents().unwrap();
return false;
);
$('div').click(function(event)
alert('Div clicked');
);
</script>
-
从常规 DOM 事件处理程序返回 false。
<div onclick='executeParent()'>
<a href='https://***.com' onclick='executeChild()'>Click here to visit ***.com</a>
</div>
<script>
function executeChild()
event.currentTarget.innerHTML = 'Click event prevented'
alert('Link Clicked');
return false
function executeParent()
alert('Div Clicked');
</script>
希望这些例子很清楚。尝试在一个 html 文件中执行所有这些示例,看看它们是如何工作的。
【讨论】:
很好的例子,但如果没有 jQuery 会更好,因为 jQuery 伪造了事件对象,所以这在技术上是不同的。 @Rudie 我更新了我的答案并从中删除了 jquery,还添加了 return false 的示例。【参考方案4】:这是here的引述
Event.preventDefault
preventDefault 方法可防止事件执行其默认功能。例如,您可以在 A 元素上使用 preventDefault 来阻止单击该元素离开当前页面:
//clicking the link will *not* allow the user to leave the page
myChildElement.onclick = function(e)
e.preventDefault();
console.log('brick me!');
;
//clicking the parent node will run the following console statement because event propagation occurs
logo.parentNode.onclick = function(e)
console.log('you bricked my child!');
;
当元素的默认功能被阻塞时,事件继续在 DOM 中冒泡。
Event.stopPropagation
第二种方法,stopPropagation,允许事件的默认功能发生,但阻止事件传播:
//clicking the element will allow the default action to occur but propagation will be stopped...
myChildElement.onclick = function(e)
e.stopPropagation();
console.log('prop stop! no bubbles!');
;
//since propagation was stopped by the child element's onClick, this message will never be seen!
myChildElement.parentNode.onclick = function(e)
console.log('you will never see this message!');
;
stopPropagation 有效地阻止父元素了解其子元素的给定事件。
虽然简单的停止方法可以让我们快速处理事件,但它是 重要的是要考虑你到底想发生什么 冒泡。我敢打赌,开发人员真正想要的只是 preventDefault 90%的时间!错误地“停止”事件可能会导致您 无数的麻烦;您的插件可能无法正常工作,而您的 第三方插件可能会变砖。或者更糟糕的是——你的代码 破坏网站上的其他功能。
【讨论】:
【参考方案5】:event.preventDefault() 阻止浏览器的默认行为(例如打开链接),但不会阻止事件冒泡 DOM。
event.stopPropagation()防止事件冒泡 DOM,但不会停止浏览器的默认行为。
return false;通常在 jQuery 代码中看到,它防止浏览器默认行为,防止事件冒泡 DOM,并立即从任何回调中返回。
查看此really nice & easy 4 min read 并查看上述文章的拍摄地点。
【讨论】:
【参考方案6】:event.preventDefault();
阻止元素的默认操作发生。
event.stopPropagation();
防止事件在 DOM 树中冒泡,防止任何父处理程序收到事件通知。
例如,如果在DIV
或FORM
内附加了一个带有click 方法的链接,该链接也附加了一个click 方法,它将阻止DIV
或FORM
click 方法触发。
【讨论】:
【参考方案7】:Event.preventDefault- 停止浏览器默认行为。现在是浏览器默认行为。假设你有一个锚标签,它有一个 href 属性,并且这个锚标签嵌套在一个有点击事件的 div 标签内。锚标记的默认行为是单击它应该导航的锚标记时,但 event.preventDefault 所做的是在这种情况下停止导航。但它永远不会停止事件的冒泡或事件的升级,即
<div class="container">
<a href="#" class="element">Click Me!</a>
</div>
$('.container').on('click', function(e)
console.log('container was clicked');
);
$('.element').on('click', function(e)
e.preventDefault(); // Now link won't go anywhere
console.log('element was clicked');
);
结果将是
“元素被点击”
“容器被点击”
现在 event.StopPropation 它停止事件冒泡或事件升级。现在有了上面的例子
$('.container').on('click', function(e)
console.log('container was clicked');
);
$('.element').on('click', function(e)
e.preventDefault(); // Now link won't go anywhere
e.stopPropagation(); // Now the event won't bubble up
console.log('element was clicked');
);
结果将是
“元素被点击”
有关更多信息,请参阅此链接 https://codeplanet.io/preventdefault-vs-stoppropagation-vs-stopimmediatepropagation/
【讨论】:
【参考方案8】:$("#but").click(function(event)
console.log("hello");
event.preventDefault();
);
$("#foo").click(function()
alert("parent click event fired !");
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<button id="but">button</button>
</div>
【讨论】:
以上是关于镀金与化金有啥区别。他们俩者用在做PCB上那样好一点的主要内容,如果未能解决你的问题,请参考以下文章
目前PCB板焊盘有:沉金板、化金板、电金板、闪金板等称呼。 想问一下哪些意思是一样的,哪些是有区别的?
在PCB行业中有化金和沉金这两种工艺,请问他们的具体有啥区别?