【问题标题】:Unable to detect what div is clicked无法检测到点击了哪个 div
【发布时间】:2015-12-21 20:56:51
【问题描述】:

我希望每个 li 标记都在 div 中的 li 标记下方显示 a 点击的 href 内容。例如,我有这样的结构:

<ul id="ids">
<li class="res"><a class="item">item1</a></li>
<li class="res"><a class="item">item2</a></li>
<li class="res"><a class="item">item3</a></li>
</ul>

如果点击了a的href,则需要显示一个在&lt;a&gt;标签之外显示div &lt;div class="testing"&gt;&lt;h3&gt;showing item1 here&lt;/h3&gt;&lt;/div&gt;的函数。该功能可能需要一些时间,因此在此之前需要显示正在加载...。但是我无法检测到用户单击的位置,因为类名相同。加载完成后,应该隐藏加载。

到目前为止,我有这个:

$(document).on('click', '.item', function(e) {
  e.preventDefault();
$(this).append('Loading');

//function code here

$(this).append('<div class="testing"><h3>showing item1 here</h3></div>');
});

此外,该函数附加了 1 个带有“mydiv”类的 div 标签,需要隐藏。但同样,由于附加到每个 &lt;li&gt; 的类名是相同的,我不知道点击发生在哪里来检测它。

总结:

  • 显示具有锚标记的元素列表
  • 点击每个元素应在该锚标记下的 div 中显示点击内容
  • 锚标记的内容可能需要 2 秒,因此在此之前用户应该会看到“正在加载”。加载后,应隐藏加载

【问题讨论】:

  • 您尝试在a 中附加div,这是不可接受的html,您不能在block 元素中添加block 元素。

标签: javascript jquery


【解决方案1】:

您正在寻找$.after()$.insertAfter()

$(document).on('click', '.item', function(e) {
  e.preventDefault();
  var aTag = $(this);
  if (aTag.siblings('.testing, .loader').length === 0) { //it's not loaded or loading
    var loader = $('<div class="loader">Loading</div>');
    loader.insertAfter(aTag);
    //function code here

    loader.remove();
    aTag.after('<div class="testing"><h3>showing ' + aTag.html() + ' here</h3></div>');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="ids">
  <li class="res"><a class="item">item1</a>
  </li>
  <li class="res"><a class="item">item2</a>
  </li>
  <li class="res"><a class="item">item3</a>
  </li>
</ul>

如果您想避免多次加载,请检查之前是否存在:

if(aTag.siblings('.testing, .loader').length === 0){ //it's not loaded or loading

}

【讨论】:

  • 但是我如何检测到如果
  • @fscore,您需要在再次加载之前检查元素是否存在。我已经更新了我的答案。
【解决方案2】:

您可以使用 `$(this) 获取 href 属性。这应该有效。

$(document).on('click', '.item', function(e) {
  e.preventDefault();
  var href = $(this).attr("href");
  $(this).append('Loading');
  $(this).append('<div class="testing"><h3>showing ' + href + ' here</h3></div>');
});

此外,上面的代码会将 div 附加到 a 标签内。你可能想用类似的东西把它放在其他地方

 $("#messageDiv").html('<div class="testing"><h3>showing ' + href + ' here</h3></div>');

要隐藏加载消息,您可以将其包装在一个跨度中

 $(this).append('<span class="loadingspan">Loading</span>');

然后在加载完成后运行的代码中,就可以使用

$('.loadingspan').hide();

【讨论】:

猜你喜欢
相关资源
最近更新 更多
热门标签