【问题标题】:What is the syntax of sending parameters in <a> tag<a>标签中发送参数的语法是什么
【发布时间】:2018-10-19 07:57:37
【问题描述】:

在给定的代码中,我试图在 var i 的基础上将动态 ID 添加到 foreach 循环内的 div。

但是,我找不到正确的语法,同样的问题出现在调用 jQuery 函数中。我正在尝试将参数 i 发送到 DeleteCurrentImage 函数。请指导我。谢谢你。这段代码写在 MVC .cshtml 文件中。

<div id="filesList">
  @foreach (var item in imgArray)
  {
    var i = 0;
    <div class="img101 floatleft" id="img101_' + i + '">
      <img src="@item" />
      <a href="#" id="DeleteCurrentImage" onclick="DeleteCurrentImage('+ i +');">Delete</a>
    </div>
    i += 1;
  }
  <div style="clear: both"></div>
</div>

【问题讨论】:

  • 看起来您正在尝试将 JS 直接包含到 HTML 中/反之亦然,这在标准 JS 中无法完成,您需要使用包含的 Javascript 文件。看看这个答案stackoverflow.com/a/30268827/1592783
  • 不,我不是,这段代码是用 MVC,.cshtml 文件编写的。使用剃刀语法
  • 我正在尝试将迭代变量“i”添加到 div ID 和 jquery 函数的函数参数中。这个函数定义写在这个cshtml页面的底部。
  • 很公平,但是在我发布该回复以提及它是一个 cshtml 文件后,您编辑了您的问题。

标签: jquery html asp.net-mvc


【解决方案1】:

i是你的C#代码中的一个变量,所以你需要将它输出到服务器端的HTML,而不是JS。你可以这样做:

<a href="#" onclick="DeleteCurrentImage(@i);">Delete</a>

请注意,我在此处删除了 id 属性,因为您正在创建无效的重复项。

话虽如此,使用不显眼的事件处理程序而不是on* 事件属性是一个更好的主意。然后,您可以简单地遍历 DOM 以查找与引发事件的元素相关的内容,而无需生成任何唯一的 id 属性。当您使用 jQuery 标记问题时,您可以这样实现:

<div id="filesList">
  @foreach (var item in imgArray) 
  { 
    <div class="img101 floatleft">
      <img src="@item" />
      <a href="#" class="DeleteCurrentImage">Delete</a>
    </div>
  }
  <div style="clear: both"></div>
</div>
$('.DeleteCurrentImage').click(function() {
  $(this).prev('img').remove();
});

请注意,这会删除兄弟img 元素。如果要删除整个包含div,请将.prev('img') 更改为.closest('div')

【讨论】:

    【解决方案2】:

    你应该做这个修复:

    1. 在 foreach 外部初始化 i
    2. 在 cicle 中附加每个项目并调用传递 id 的函数(前面是 #id 选择器)
    3. 在函数中通过id删除想要的元素
    4. 增加i

      <div id="filesList">
          @{
              var i = 0;
              foreach (var item in imgArray) 
              {             
                  <div class="img101 floatleft" id="img101_@(i)">
                      <img src="@item" />
                      <a href="#" onclick="DeleteCurrentImage('#img101_@(i)');">Delete</a>
                  </div>
                  i++;
              }
          }
          <div style="clear: both"></div>
      </div>
      <script>
          function DeleteCurrentImage(item) {
              // Delete the element
              $(item).remove();
          }
      </script>
      

    【讨论】:

    • i++需要进入foreach
    • 对@BryanVam!我错过了;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2021-02-20
    • 2014-07-06
    • 2012-01-25
    • 1970-01-01
    • 2011-08-24
    相关资源
    最近更新 更多