无法通过单击从元素中获取数据

Can't get data from element by clicking

提问人:MilanKlepar 提问时间:7/29/2023 更新时间:7/29/2023 访问量:21

问:

大家,我一直在一件事上坚持不懈。我在 JavaScript JQuery 中有这样的代码。 而那些带有点击的下部,我只是无法从点击的元素中获取 data-num 属性。我已经尝试了 100 种方法来做到这一点,但它总是未定义的(但如果我通过开发人员工具找出元素,这个“数据数字”确实存在),或者粉碎或不起作用。

let tumbArr = [];
for (x = 0; x < imgARR.length; x++) {
    let thumb = document.createElement('button');
    $(thumb).css('background-image', 'url(' + images[x].src +')');
    elements.append(thumb);
    $(thumb).attr('id', 'thumb' + x)
    $(thumb).attr('data-num', x);
    tumbArr[x] = $(thumb);
    $(thumb).attr('class', 'thumbs');    
}
$('#thumbCase').append(elements);

// this part bellow
$('.thumbs').click(()  =>  {
    s = $(this).attr('data-num');
    imgSet(s);
})

当我制作一个 toDO 应用程序时,一切都是这样工作的......

addButton.click(() => {
    clickCount++;
    let newLI = document.createElement('li');
    newLI.textContent = addIN.value;
    elements.append(newLI);
    ul.append(elements);
    $(newLI).addClass('donePlan');
    $(newLI).attr('id','plan' + clickCount );
   
    del = document.createElement('button');
    $(del).addClass('delbutton');
    $(del).html('<img src="./delete_ic_icon.png">');
    newLI.append(del);
    $(del).attr('data-plan', '#plan' + clickCount)
   ** let planID = $(this.del).attr('data-plan');
    
   
    $(del).click (()=> {
        $(planID).remove();**
    })
   
})

请帮帮我,谢谢

我试图使 .thumbs 类像变量一样,以选择按钮,我在循环中从这个按钮制作了一个数组 tumbArr[x] = $(thumb),但它只是没有像我想要的那样工作,而且我认为它在逻辑上应该工作。

jquery onclick dom-events jquery-events

评论

0赞 Alexander Nenashev 7/29/2023
在代码段中发布带有 HTML 的代码(单击问题编辑器中的工具栏按钮)。然后,我想你会尽快得到帮助。否则,重新创建您的案例会很无聊

答:

0赞 Alexander Nenashev 7/29/2023 #1
  • 您使用的箭头函数的工作方式不同。 在箭头中,函数属于外部范围。因此,您应该在箭头函数中使用,而不是使用通常的 .thisthisthisEvent::currentTargetthisfunction(){}

  • 似乎您尝试将 click 事件委托给父容器。在这种情况下,将是容器的 DOM 元素,处理程序将对所有单击做出反应,而您只需要单击按钮。您应该使用特殊的委托函数签名,以便指向单击的按钮。.thumbsthisthis

所以箭头函数选项:

$('.thumbs').on('click', 'button', event => {
    s = $(event.currentTarget).attr('data-num');
    imgSet(s);
})

功能选项:

$('.thumbs').on('click', 'button', function() {
    s = $(this).attr('data-num');
    imgSet(s);
})

评论

1赞 MilanKlepar 7/29/2023
非常感谢,它有效)
1赞 MilanKlepar 7/29/2023
我还发现了这个决策函数 clicker (x) { let s = $(tumbArr[x]).attr('data-num'); return ( $(tumbArr[x]).click (()=> { imgSet(s) curr = s; thumbSet(); }) ) } for (x=0; x<tumbArr.length; x++){ clicker(x); }