- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 javascript 的新手,我试图在按下按钮时显示不同类型的元素。 html 按钮显示 html 元素,与 bootstrap 按钮和 wordpress 按钮相同。事情是脚本随机工作。如果我有 4 个不同的元素,只有其中 2 个是 html 元素时才有效。如果我添加更多元素,有时行得通有时行不通。
<div class="botones">
<div class="todos">
<p>TODOS</p>
</div>
<div class="ht">
<p>HTML</p>
</div>
<div class="wp">
<p>WORDPRESS</p>
</div>
<div class="bt">
<p>BOOTSTRAP</p>
</div>
</div>
<div class="content-proyec">
<div class="sample wp-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-cocinero.jpg"></a>
</div>
</div>
<div class="sample bt-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-woocommerce.jpg"></a>
</div>
</div>
<div class="sample bt-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-justicia.jpg"></a>
</div>
</div>
<div class="sample ht-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-jane.jpg"></a>
</div>
</div>
</div>
var ht = document.querySelectorAll(".ht-pro");
var wordpress = document.querySelectorAll(".wp-pro");
var bootstrap = document.querySelectorAll(".bt-pro");
var proyectos = document.querySelectorAll(".sample");
document.querySelectorAll(".botones div").forEach(div => {
div.addEventListener('click', function() {
if (div.className == "todos"){
for (var i = 0; i <= proyectos.length; i++){
ht[i].style.display = "block";
wordpress[i].style.display = "block";
bootstrap[i].style.display = "block";
}
}
else if(div.className == "ht"){
for (var i = 0; i <= proyectos.length; i++){
ht[i].style.display = "block";
wordpress[i].style.display = "none";
bootstrap[i].style.display = "none";
}
}
else if(div.className == "wp") {
for (var i = 0; i <= proyectos.length; i++){
ht[i].style.display = "none";
wordpress[i].style.display = "block";
bootstrap[i].style.display = "none";
}
}
else if(div.className == "bt") {
for (var i = 0; i <= proyectos.length; i++){
ht[i].style.display = "none";
wordpress[i].style.display = "none";
bootstrap[i].style.display = "block";
}
}
});
});
最佳答案
遍历所有 div 以隐藏和显示它们的代码无法维护和冗余,所有条件语句也是如此,这很快就会导致代码变得冗长。
您可以减少很多所需的 javascript 代码,并使用 CSS 来显示/隐藏您的 block
var btt = document.querySelector('.botones');
var cnt_proyec = document.querySelector('.content-proyec');
btt.addEventListener('click', function(ev) {
if (ev.target.matches('button')) {
cnt_proyec.dataset['current'] = ev.target.className;
}
})
.sample {
display: none;
}
[data-current="ht"] .ht-pro,
[data-current="wp"] .wp-pro,
[data-current="bt"] .bt-pro,
[data-current="todos"] .sample {
display: block ;
}
<div class="botones">
<button class="todos">
TODOS
</button>
<button class="ht">
HTML
</button>
<button class="wp">
WORDPRESS
</button>
<button class="bt">
BOOTSTRAP
</button>
</div>
<div class="content-proyec">
<div class="sample wp-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-cocinero.jpg" alt="wp-pro"></a>
</div>
</div>
<div class="sample bt-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-woocommerce.jpg" alt="bt-pro"></a>
</div>
</div>
<div class="sample bt-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-justicia.jpg" alt="bt-pro"></a>
</div>
</div>
<div class="sample ht-pro">
<div class="sample-img">
<a href=""><img src="img/proyectos/proyecto-jane.jpg" alt="ht-pro"></a>
</div>
</div>
</div>
首先,你应该使用真正的<button>
元素而不是 div(当然,还可以根据您的喜好设置样式)也是为了可访问性。
然后您只需要在按钮包装器元素上捕获点击事件并检测被点击按钮的类名即可。
将该类名用作 data-current
proyec 元素上的属性,并使用该属性通过 CSS 正确隐藏和显示 block 。
关于javascript - addEventListener 随机工作,我不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57181025/
我想在按下按钮时打开一个表单,然后在完成表单后创建另一个按钮以将数据存储在对象中。 我这样做了,但在第二个 addEventListener 中它给了我这个错误: cannot read proper
这是我实际代码的简化版本。 有三个复选框和按钮(每个编号为 0、1、2)和一个提交按钮。简而言之,如果您选中复选框编号 1 和 2,单击提交,按钮 1 和 2 将被着色。现在您可以单击任何彩色按钮,它
问题代码 var el = document.getElementById("searchcharm_'"+touch_id+"'"); el.addEventListener('click',
window.document.addEventListener = function(event) {...} window.addEventListener = function(event) {
这段代码块有什么区别: var xhr = new XMLHttpRequest(); xhr.upload.addEventListener("progress", uploadProgress,
在使用 PhoneGap 时,它有一些使用 document.addEventListener 的默认 JavaScript 代码,但我有自己的代码使用 window.addEventListener
当我运行这段代码时,为什么 .body 事件先触发? document.addEventListener('click', function() { console.log('The docume
我将带有循环的 addEventListener 添加到一些 anchor 元素 products 中,如下所示: for(var j=0;j
所以我的代码可以按我想要的方式工作,但是大多数(IE 除外)调试器都会向我抛出此错误: 未捕获类型错误:无法读取未定义的属性“addEventListener” 这是代码: //Get all ele
我真的不知道为什么这不起作用。在我的 HTML 中,如果我将脚本放在 head 部分,我会在控制台中收到以下错误: Uncaught TypeError: Cannot read property '
在 React 中,当你有一个带有 onClick 属性的元素时,很容易使用 Enzyme 的 .simulate("click") 方法来点击它。然而,在我的代码库中有一个示例,其中一个元素被 Re
问候,由于某种原因,当我单击按钮时,我的 -addEventListener 没有执行。任何人都可以帮忙这是我的代码: function elNegro() { alert("Thank Yo
我正在将我的一些代码从 onClick 更改为 addEventListener,因为我已经阅读了各种好处,并且出于关注点分离的目的。然而,我遇到的问题之一是,虽然使用 onClick,我能够调用一个
我正在尝试向我在循环中生成的某些元素添加事件监听器。我必须使用 div.lastChild - 虽然在这个例子中它非常愚蠢。但这只是演示: var func = function() {
我在将事件监听器添加到 JS 时遇到问题...如果我将按钮与 onclick 属性连接,它会起作用,但如果我在 HTML 中删除它并尝试添加 eventListener('click', myFunc
我不知道为什么,但是当我点击“按钮”时什么也没有发生... 控制台中没有消息,没有错误。如何解决? JS var bird = (function(){ let button = doc
我正在绘制一个方框网格,希望能够单击每个方框并使用 SocketIO 将带有其 ID 的通知发送到服务器 let boxes = document.querySelecto
我想是新手问题。 以下代码是我在文档就绪时调用的函数的一部分。它旨在在鼠标移动时永久返回当前鼠标位置的值。 正在发生的奇怪事情:在文档就绪时移动鼠标不会将任何内容记录到控制台。我知道 mouse_mo
我是 Flash 的新手,我似乎无法完成这个简单的操作。 (我正在使用 ActionScript 3.0) 我在我的编辑器中创建了一个输入文本框。实例名称是“测试”。在我的 Action 编辑器中,我
我有一个像 那些标签包含一些内容,我想打开/关闭它们,但仅使用纯 javascript。我已经尝试过使用 document.querySelectorAll
我是一名优秀的程序员,十分优秀!