【问题标题】:jquery on() with addClass/removeClass带有 addClass/removeClass 的 jquery on()
【发布时间】:2013-01-07 01:22:26
【问题描述】:

我有这个需要在 ipad 上运行的脚本。它正在使用 live 处理 chrome,但是,将其移至 on 会使其无响应。

任何想法,我将不胜感激!

$("#clickAll").on("click", function () {
    $(".welcome1poi").show();
    $(this).addClass("active");
});
$("#clickAll.active").on("click", function () {
    $(this).removeClass("active");
    $(".welcome1poi").hide();
});

【问题讨论】:

  • 如果在代码运行后将#clickAll 添加到 DOM,您需要将事件委托给 DOM 树的更高层。阅读docs for .on()
  • 不需要两个事件。像我刚刚添加的副本一样使用 toggleClass 并切换以显示和隐藏其他元素!

标签: javascript jquery ios ipad


【解决方案1】:

试试这个

$("#clickAll").on("click", function(){
    $(".welcome1poi").toggle();
    $(this).toggleClass("active");
});

更新

按照建议

$(document).on('click',"#clickAll", function(){
    $(".welcome1poi").toggle();
    $(this).toggleClass("active");
});

由于它与 live() 一起工作,我假设您的 id 为 clickAll 的元素是动态添加的,所以试试这个

$(document).on("click","#clickAll", function () {
   $(".welcome1poi").show();
   $(this).addClass("active");
});
$(document).on("click","#clickAll.active", function () {
  $(this).removeClass("active");
   $(".welcome1poi").hide();
});

您可以将$(document) 选择器替换为最接近#clickAll 元素的元素,这样会更有效

【讨论】:

  • 是的,问题是一些带有welcome1poi类的项目将在点击之前打开/关闭...
  • 问题中没有提到,所以我向您展示了实现这一目标的最简单方法......但是如果是这种情况,那么我更新了我的答案......请检查
  • 您的更新版本...添加active 类后不会触发这两个事件吗?
  • 嘿,对不起。感谢您的帮助,在语法方面的一些小课对我有帮助。
【解决方案2】:

这会将事件委托给body,当它冒泡DOM时会被捕获。

$('body').on("click", "#clickAll", function(){
    $(".welcome1poi").show();
    $(this).addClass("active");
});
$('body').on("click", "#clickAll.active", function(){
    $(this).removeClass("active");
    $(".welcome1poi").hide();
});

【讨论】:

  • 那里的活动顺序无法保证!
  • 你在谈论@epascarello的什么事件顺序?
  • 你能保证没有班级的那个不会在有班级的那个之前被调用吗?它们都适用于同一个元素。此外,代码只是重新发明了切换和切换类。
  • 我刚刚修改了OP的代码并回答了他原来的问题。 toggle() 在最新版本的 jQuery 中已弃用
【解决方案3】:

您是否添加和删除“活动”类以创建切换效果?如果是这样,请尝试 .toggle(),如下所示:

$('#clickAll).toggle(
    function() { $('.welcome1poi').show(); }, 
    function() { $('.welcome1poi').hide(); });

【讨论】:

  • toggle() event 已在 1.8 中弃用并在 1.9 中删除。由于不推荐使用的原因,即使是旧版本的 jQuery,我也不建议使用它。
  • 谢谢,我不知道为什么我没有想到这个!
  • 这不是正确的解决方案,因为它已被弃用! 问题:bugs.jquery.com/ticket/11786。当你升级 jQuery 版本时,请随意使用它并让你的代码停止工作。或者您可以使用 toggle 和 toggleClass 选择 @bipen 的解决方案并让它工作。
  • 天哪!但是如果你继续使用早期版本的 jQuery 这个解决方案就很好了。
  • @JayBlanchard 我预测几个月后 JamesB 会问为什么这段代码不再有效。 ;) 一直在这里发生。第一次就做对,以后就不必再修复了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多