dom-events 相关问题

DOM(文档对象模型)事件允许事件驱动的编程语言在DOM树内的元素节点上注册各种事件处理程序/侦听器。

为什么 onkeyup 事件在 Javascript 游戏中没有触发

我开始了 2d Javascript 游戏 - 目前玩家可以使用箭头键在屏幕上驱动一个三角形。 问题是,有时三角形会卡住旋转......

回答 2 投票 0

删除动态React组件中的事件监听器

询问有关在动态反应组件中添加和删除事件侦听器的建议。 所以,我有一个包含对象列表的功能组件。 它的渲染方式如下: objectList.map( (项目) ...

回答 1 投票 0

如何知道 DOM 元素何时移动或调整大小

我想知道是否有一个 DOM 事件需要监听,它会告诉我 DOM 元素何时在页面上移动、重新定位或调整大小。我不是在谈论被拖/放的元素。一个

回答 4 投票 0

尝试删除 JavaScript 中的元素时,事件委托未按预期工作

当然,这里有一个关于如何在 Stack Overflow 上提出问题的建议: 标题:尝试删除 JavaScript 中的元素时事件委托未按预期工作 身体: 我正在努力...

回答 1 投票 0

如何在Javascript中阻止用户关闭窗口?

是否可以阻止用户使用退出按钮 [X] 关闭窗口?我实际上在页面中提供了一个关闭按钮,供用户关闭窗口。基本上我正在尝试做的事情...

回答 9 投票 0

window.location.href 不重定向

我知道这是一个经常讨论的问题,但我不明白为什么它对我不起作用。 这是我的功能: 函数显示评论(){ 警报(“解雇”); var movieShareId = document.getElemen...

回答 12 投票 0

如何使 Nextjs 应用程序侦听器在窗口事件“加载”触发之前附加?

我对 next.js 有点陌生,使用 typescript,版本 13.5.5。该应用程序必须放置在 iframe 内,并且我通过 window.properties 从父级/主机接收一些信息。消息后事件。我正在放置李...

回答 1 投票 0

检查事件的目标是否在组件内,而不使用 stopPropagation()

我正在使用自定义选择, 我如何检查事件的目标是否在组件内,而不是使用 stopPropagation? 这样我就可以避免在全局范围内停止点击事件的传播...

回答 1 投票 0

如何在点击事件上添加和删除多个框的背景颜色

当我单击一个框时,页面背景应该更改为框的颜色(正在发生),但我想要的是无论我最后单击哪个框,该框的颜色也应该改变。 我也是

回答 1 投票 0

Google Chrome 上的页面隐藏事件

我拼命地想在 Chrome 上实现这个功能(在 Firefox 上很好) window.addEventListener( “页面隐藏”, 功能() { console.log("页面隐藏"); }, { 捕获:真 } ); 现在这个触发...

回答 2 投票 0

为什么我的函数中 event.currentTarget 为 null?

我正在调试 JavaScript 代码中的一个问题,其中一个变量未正确设置。经过一番研究,我发现该变量没有被填充,因为它正在获取其值......

回答 1 投票 0

为什么带有 onclick 的按钮内的 img 不触发脚本?

我有一个带有 onclick 的按钮。按钮内部有一个图像,但它不会触发脚本。 函数 myFunction1() { document.getElementById("rightdrop02").classList.toggle("show")...

回答 2 投票 0

Javascript DOM 中添加事件侦听器按钮的问题

我正在尝试创建一个日历,我很久以前就用另一种语言编写了代码,但我的公司网站实际上是用javascript和HTML编写的,所以就是这样。 我有一个非常基本的问题...

回答 1 投票 0

是否有一种跨浏览器方法可以测试 <img> 标签是否损坏且不需要内联事件处理程序?

我正在寻找一种方法来测试图像的src是否损坏,以便我可以用默认图像替换src。但是,我无法使用内联事件处理程序,例如“onerror”。 是否

回答 1 投票 0

使用 javascript 添加选中的类

我尝试使用事件侦听器将检查的类添加到待办事项列表项目中。但事件侦听器并未附加到每个复选框类。这是代码 导出默认函数 (){ 常量

回答 1 投票 0

Google 翻译中 div 的单击或鼠标松开事件

我正在编写一个 JavaScript 书签来为 Google 翻译创建快捷方式。例如,输入 ESC 或 \ 将清除 TextArea。现在我想添加一个快捷方式,当输入]时,它将交换...

回答 3 投票 0

Vuejs - 如何在元素上的加载事件上调用方法

我想在使用 vuejs 将元素加载到 for 循环中时调用元素上的加载事件。我在页面加载时发现了 onload 事件,但无论如何我都找不到对元素执行此操作的方法。这是我的代码,但我...

回答 1 投票 0

双击内容可编辑元素进行聚焦(看起来并不那么容易)

我长期以来一直在寻找这个问题的解决方案,所以我现在要在这里问。 从普通的 contenteditable div 元素开始,如下所示: 编辑此... 我长期以来一直在努力寻找这个问题的解决方案,所以我现在要在这里问。 从普通的可内容编辑的 div 元素开始,如下所示: <div contenteditable>Edit this text</div> 如果单击文本,您将可以将光标放在单击的位置进行编辑。 现在,我不希望文本在第一次单击时可编辑,并且我根本不希望在元素未聚焦时能够与文本进行交互。我可以通过禁用 div、使用 CSS 或覆盖元素将内容编辑为可编辑来实现此目的。 我现在希望该元素再次可编辑双击时,其行为与正常单击该元素所期望的行为完全相同。让我们使用 JavaScript 和 EventListener 来实现 onmousedown 或 ondblclick。 示例1 <div id="wrapper"> <div id="overlay"></div> <div id="editable" contenteditable>Edit this text</div> </div> overlay.ondblclick = () => { overlay.style.display = 'none'; editable.focus(); }; // use onblur to restore the overlay 这可行,但光标将位于元素的开头。如果您不使用 focus(),则必须第三次单击才能聚焦该元素。 示例2 <div id="editable" contenteditable="false">Edit this text</div> editable.ondblclick = () => { editable.setAttribute('contenteditable', true); }; // use onblur to set contenteditable to false again // additional CSS will prevent being able to interact with the text if not focused 这可行,但您将选择要单击的单词,而不是将文本光标放在那里。 这是一个私人项目,可访问性、兼容性等并不重要。 经过几个小时的研究,我得出了这个解决方案: const editable = document.getElementById('editable'); editable.ondblclick = (event) => { if (document.activeElement === event.target) return; editable.setAttribute('contenteditable', true); selectRange(getMouseEventCaretRange(event)); } function getMouseEventCaretRange(event) { if (event.rangeOffset !== undefined) { // The new fancy Firefox-only way that doesn't even have documentation let range = document.createRange(); range.setStart(event.rangeParent, event.rangeOffset); range.collapse(true); return range; } else if (document.caretPositionFromPoint) { // The 'official' way (only used by Firefox) that doesn't even position the cursor correctly // VSC keeps telling me the method doesn't exist let pos = document.caretPositionFromPoint(event.clientX, event.clientY); let range = document.createRange(); range.setStart(pos.offsetNode, pos.offsetX); range.collapse(true); return range; } else if (document.caretRangeFromPoint) { // The 'deprecated WebKit-proprietary fallback method' (used by every mf browser out there) return document.caretRangeFromPoint(event.clientX, event.clientY); } } function selectRange(range) { const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } * { font-family: monospace; } #editable { font-size: 1.5rem; } #editable[contenteditable="false"] { user-select: none; cursor: pointer; } #editable[contenteditable="false"]::selection { background-color: transparent; } <div id="editable" contenteditable="false" onblur="this.setAttribute('contenteditable', false);">Double click to edit this text</div> <ul> <li>Caret is placed where clicked, not at the start</li> <li>Double clicked word is not highlighted</li> <li>Text can not be interacted with if the element isn't focused</li> </ul> 它又长又复杂,但很有效。在我看来,这个 API 完全混乱了。我希望这可以帮助将来的人。 不需要任何复杂的事情,只需在添加可编辑内容时防止双击操作,同时确保其处于焦点即可。 document.addEventListener('mousedown', (event) => { if (event.detail > 1) { // double-clicked const e = event.target; if (e.id === "content" && !e.contenteditable) { e.contentEditable = true; event.preventDefault(); e.focus(); } } }, false); <div id="content">Edit this text</div>

回答 2 投票 0

父级和子级 div 上的事件处理程序

这是我的 HTML 文件 document.querySelector('.a').onclick = ()=>{ 做...</desc> <question vote="1"> <p>这是我的 HTML 文件</p> <pre><code>&lt;div class=&#34;a&#34;&gt; &lt;div class=&#34;b&#34;&gt; &lt;/div&gt; &lt;/div&gt; &lt;script&gt; document.querySelector(&#39;.a&#39;).onclick = ()=&gt;{ document.querySelector(&#39;.a&#39;).style.backgroundColor =&#39;black&#39; } document.querySelector(&#39;.b&#39;).onclick = ()=&gt;{ document.querySelector(&#39;.b&#39;).style.backgroundColor =&#39;violet&#39; } &lt;/script&gt; </code></pre> <p>当我单击类为“b”的 div 时,类为“a”的 div 上的事件处理程序也会被调用。我只想调用带有“b”类事件处理程序的 div。有人可以帮忙吗?</p> </question> <answer tick="true" vote="3"> <p>这就是<a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture" rel="nofollow noreferrer">事件冒泡</a>,这意味着每个事件不仅会在目标元素上触发,还会在其祖先元素上触发。</p> <p>要防止这种行为,您可以使用 <a href="https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation" rel="nofollow noreferrer">Event.stopPropagation</a> 来阻止事件传播到目标元素的祖先元素。</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>document.querySelector(&#39;.a&#39;).onclick = () =&gt; { document.querySelector(&#39;.a&#39;).style.backgroundColor = &#39;black&#39; } document.querySelector(&#39;.b&#39;).onclick = (event) =&gt; { event.stopPropagation(); document.querySelector(&#39;.b&#39;).style.backgroundColor = &#39;violet&#39; }</code></pre> <pre><code>div { width: 100px; height: 100px; } .a { padding: 40px; background: red; } .b { background: blue; }</code></pre> <pre><code>&lt;div class=&#34;a&#34;&gt; a &lt;div class=&#34;b&#34;&gt;b&lt;/div&gt; &lt;/div&gt;</code></pre> </div> </div> <p></p> </answer> <answer tick="false" vote="1"> <p>JS中有一个概念叫<a href="https://javascript.info/bubbling-and-capturing#bubbling" rel="nofollow noreferrer">事件冒泡</a>。默认情况下,特定元素上发生的任何事件都将传播到父级及其父级,依此类推,直到事件到达文档。</p> <p>为了阻止这种行为,<a href="https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation" rel="nofollow noreferrer"><pre><code>Event.stopPropagation</code></pre></a>将前来救援并停止向家长传播该事件。</p> <p>因此,在这种情况下,在具有类 <pre><code>e.stopPropagation</code></pre> 的 div 的 <pre><code>onclick</code></pre> 处理程序中调用 <pre><code>b</code></pre>,即内部 div 将停止将事件传播到父 div。</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code>document.querySelector(&#39;.a&#39;).onclick = (e) =&gt; { document.querySelector(&#39;.a&#39;).style.backgroundColor = &#39;black&#39; } document.querySelector(&#39;.b&#39;).onclick = (e) =&gt; { e.stopPropagation(); document.querySelector(&#39;.b&#39;).style.backgroundColor = &#39;violet&#39; }</code></pre> <pre><code>.b { width: 50%; }</code></pre> <pre><code>&lt;div class=&#34;a&#34;&gt; &lt;div class=&#34;b&#34;&gt; Dummy &lt;/div&gt; &lt;/div&gt;</code></pre> </div> </div> <p></p> </answer> <answer tick="false" vote="0"> <p>试试这个:</p> <p></p><div data-babel="false" data-lang="js" data-hide="false" data-console="true"> <div> <pre><code> document.querySelector(&#39;.a&#39;).onclick = ()=&gt;{ document.querySelector(&#39;.a&#39;).style.backgroundColor =&#39;black&#39; } document.querySelector(&#39;.b&#39;).onclick = (e) =&gt; { e.stopImmediatePropagation(); document.querySelector(&#39;.b&#39;).style.backgroundColor =&#39;violet&#39; }</code></pre> <pre><code>&lt;div class=&#34;a&#34;&gt;a &lt;br/&gt; &lt;div class=&#34;b&#34;&gt; Click here! &lt;/div&gt; &lt;/div&gt;</code></pre> </div> </div> <p></p> </answer> </body></html>

回答 0 投票 0

使用JavaScript触发点击事件[重复]

我想使用javaScript触发点击事件。我已经使用 jQuery 完成了这样的操作: $('button[type="submit"]').trigger('点击'):

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.