【问题标题】:Javascript not() in onclick event [duplicate]onclick事件中的Javascript not()[重复]
【发布时间】:2017-10-08 07:14:05
【问题描述】:

我的纸牌游戏中有一个点击功能,我想在其中包含 not() 以排除某些类,但我似乎无法让它工作。

基本上,我想让它只要类不等于“匹配”或“打开”,就可以继续点击事件。如果它们匹配,则不要运行该函数。

这是我现在正在使用的更新后的基本代码的 sn-p:

function addCardListener() {
     $( '.card:not(.match, .open, .show)').on('click', function(){
          alert("TEST");
          $(this).addClass('open show');
     });
}

我尝试替换:

$('.card').on('click', function() { 

与:

$( '.card:not(".match, .open")').bind('click', function(){

但它不起作用。无论卡上是否定义了这些类,我都可以继续单击我的牌组中的任何内容。我究竟做错了什么?提前感谢您的帮助!

更新: 我剥离了所有代码,但仍然无法正常工作。不确定您是否会看到此更新,但我的板子创建是这样完成的:

function createBoard() {
     shuffle(symbols);
     match = 0;
     moves = 0;
          for (var i = 0; i < symbols.length; i++) {
               deck.append($('<li class="card"><i class="fa fa-' + 
               symbols[i] + '"></i></li>'));
    }
    addCardListener();
};

无论卡片的职业是否有公开比赛或显示,点击功能都会关闭。我想我很困惑,我认为如果卡有这些类,则函数不会运行。我更新了上面函数的精简版本。任何建议将不胜感激!

【问题讨论】:

  • 控制台错误?动态创建的卡片?
  • 没有控制台错误,它就像 not 方法不存在一样。我可以单击我希望 not() 会阻止该功能运行的卡片。我将上面的代码更新为精简版本。有什么建议吗?非常感谢

标签: javascript jquery


【解决方案1】:

试试这个 - 如果卡片是动态插入的,则委托:

$('body').on('click', '.card:not(.match,.open)', function(e) {
    console.log(e);
});

如果可能,将“body”更改为更近的容器以加快委派速度

【讨论】:

  • 非常感谢分享,我试过你的,但我无法点击任何卡片。我想我一定有一个更深层次的问题。如果我使用 $('.card').not('.match').on('click', function () { });我可以点击卡片,但它忽略了我的不。我已经检查过了,我的课程也是正确的。我会继续调查,再次感谢您的宝贵时间。
  • 我只是碰巧注意到您的更新 - 您是在动态添加 .match.open 类到您的卡片吗?
  • 我知道我做错了什么!我不知道一旦您附加了一个事件侦听器,它就会保持这种状态,这引起了我的困惑。我认为这是一个一次性的事件可以这么说。所以我改用 hasClass() 方法检查它,效果很好!再次感谢您的宝贵时间!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多