JavaScript 函数仅适用于具有类名称的第一个元素,不适用于具有该类的所有元素

标签 javascript html

我在一页上有多个结构相同的表单。

它们都有一个包含“onchange”事件的文件输入字段,当选择文件时,该事件会从我的提交按钮中删除“禁用”属性。

问题是,我的函数仅适用于具有该类名称的第一个元素。我怎样才能让它适用于该类的每个项目?

index.php:

<form class="form">
    <input type="file" name="image" onchange="unlock();">
    <input type="text" name="title" placeholder="Image title"/>
    <input type="submit" value="Add image" class="submit" disabled/>
</form>

<form class="form">
    <input type="file" name="image" onchange="unlock();">
    <input type="text" name="title" placeholder="Image title"/>
    <input type="submit" value="Add image" class="submit" disabled/>
</form>

脚本.js:

function unlock() {
    document.querySelector('.submit').removeAttribute("disabled");
}

感谢任何帮助!

最佳答案

  1. 使用事件监听器
  2. 使用选择器进行相对寻址
  3. 养成永远不要在表单中调用任何提交的习惯

document.querySelectorAll("[name=image]").forEach(
    ele => ele.addEventListener("change",
      (e) => e.target.closest(".form").querySelector(".sub").disabled = false
    )      
);      
<form class="form">
  <input type="file" name="image">
  <input type="text" name="title" placeholder="Image title" />
  <input type="submit" value="Add image" class="sub" disabled/>
</form>

<form class="form">
  <input type="file" name="image">
  <input type="text" name="title" placeholder="Image title" />
  <input type="submit" value="Add image" class="sub" disabled/>
</form>

更兼容的版本

[...document.querySelectorAll("[name=image]")].forEach(function(ele) {
  ele.addEventListener("change",
    function(e) {
      e.target.parentNode.querySelector(".sub").disabled = false;
    })
});
<form class="form">
  <input type="file" name="image">
  <input type="text" name="title" placeholder="Image title" />
  <input type="submit" value="Add image" class="sub" disabled/>
</form>

<form class="form">
  <input type="file" name="image">
  <input type="text" name="title" placeholder="Image title" />
  <input type="submit" value="Add image" class="sub" disabled/>
</form>

关于JavaScript 函数仅适用于具有类名称的第一个元素,不适用于具有该类的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57610270/

相关文章:

html - 使用 LESS 嵌套规则时防止样式通过级联应用

javascript - 如何将按钮作为html添加到div并添加点击功能

javascript - javascript 对象的循环属性

javascript - 在 react 中导出高阶组件

javascript - 如何在不调用链中的每个方法的情况下构建流畅的 api

html - 为溢出移动的文本设置模糊或渐变

javascript - anchor 链接的平滑滚动不起作用

javascript - Jade 模板 - 使用 URL 作为链接标签

javascript - XHR,可以​​强制建立新连接吗?

html - 某些字体不适用于@font-face?