【问题标题】:Select and Deselect in Laravel and Javascript在 Laravel 和 Javascript 中选择和取消选择
【发布时间】:2020-10-30 12:50:18
【问题描述】:

我正在创建一个函数,允许用户使用 Javascript 选择和取消选择多个产品,问题是它只显示一个复选框而不是每个产品都有其复选框。如果我有 20 个产品,它会显示 1 个复选框第一个产品,我该如何解决这个问题?

刀片文件

<span><a class="Select-Deselect" href="">Select</a></span>

   @foreach($products as $product)
    <div id="checkBox1" style=" display:none; position:absolute;">
       <h1>hello</h1>
     </div>
  @endforeach

Javascript

    <script>
    /* Select deselect */
    $(".Select-Deselect").click(function(e) {
if ($(this).html() == "Select") {
    document.getElementById("checkBox1").style.display="block";
    $(this).html('Deselect');


}
else {
    $(this).html('Select');
    document.getElementById("checkBox1").style.display="none";
}
return false;
});
</script>

【问题讨论】:

  • 您的页面上有多个带有id="checkBox" 的元素。 id 属性必须是唯一的。也许改用一个类
  • 对不起,我没听懂,你能解释一下吗? @kerbh0lz
  • 在您的循环中,您正在创建多个&lt;div id="checkBox"&gt;。您的文档中只能有 一个 元素/div 和 id="checkBox"id 属性必须都是唯一的,例如 &lt;div id="checkBox1"&gt;&lt;div id="checkBox2"&gt; 等。这就是为什么 document.getElementById("checkBox") 只获取这些元素中的第一个。 developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id
  • 我尝试更改并只在循环中放置一个 div,但仍然无法正常工作? @kerbh0lz
  • 在循环中放置多少个 div 并不重要,重要的是当您查看文档的源代码时没有重复的 ids。您能否更新您的问题以显示新代码?

标签: javascript laravel laravel-5


【解决方案1】:

在您的循环中,您将再次创建具有相同 id 属性的多个 div。删除id 属性并改用class,如上所述,id 属性在文档中必须是唯一的。

将您的&lt;a&gt; 更改为选择/取消选择按钮,这更合适:

由于您已经在脚本中使用了 jQuery,我还使用它来切换元素上的 display 样式。

我删除了 id="checkBox1" 并将其替换为 class="checkbox-container"。使用类可以选择多个元素,这就是 $(".checkbox-container") 所做的。

这是一个工作示例:

刀片:

<button class="Select-Deselect" type="button">Select</button>

@foreach($products as $product)
<div class="checkbox-container" style="display:none;">
  <h1>hello</h1>
</div>
@endforeach  

jQuery:

<script>
$(".Select-Deselect").click( function(e) {
  if ($(this).html() == "Select") {
    $(".checkbox-container").css('display', 'block');
    $(this).html('Deselect');
  } else {
    $(".checkbox-container").css('display', 'none');
    $(this).html('Select');
  }
  return false;
});
</script>

【讨论】:

  • 这行得通,但我只想知道为什么position:absolute 不能很好地处理这个问题,因为如果我输入position:absolute,它只会像以前一样显示一个元素。 @kerbh0lz
  • 因为您没有为元素设置任何topleftrightbottom 属性,所以它们都位于同一位置
  • 好吧,我刚刚尝试放置填充和左、右、下但不工作,就我而言,我必须使用position:absolute。你有什么想法可以完成这项工作吗? @kerbh0lz
  • 不确定你是如何应用填充和底部等的,但如果你在循环中这样做,所有元素都将具有相同的填充等,因此仍然覆盖在相同的位置。我真的认为您没有理由必须 在这里使用绝对 职位。是什么原因?对于不同的问题,这听起来像是不同的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多