jQuery 不使用 onclick 获取元素

jQuery get element without use of onclick

我试图在不使用 onclick 的情况下获取 HTML 输入的元素 ID(或数据属性)。我的代码:

<button class="button primary" type="button" onclick="add_poll_answers(30)">Submit</button><br />

这是我的 jQuery 函数:

function add_poll_answers(id)
{
    var answers = [];
    var i = '0';
    $('input[id^="new-answer-'+id+'"]').each(function() {
        answers[i] = $(this).val();
        ++i;
    });
    $.post("index.php?module=actions&action=edit_poll&process=add",
    {
    pollid: id,
    answer: answers,
},
function(data, status)
{
    if (data != '')
        alert(data);
        else
            $("#ajax_add_"+id).slideDown();
    });
}

我需要的是某种删除 onclick 并将其添加到单独的 jQuery 文件的方法。我不能只使用以下内容,因为每页有多个民意调查,而且 ID 会发生冲突。我真正需要的是一种让您单击某些内容的方法,如下所示,然后 jQuery 可以动态获取元素的数据属性以获取轮询的 id。换句话说,我希望 javascript 获取 id 而无需使用 onclick 传递它。

有人知道如何实现吗?

$(document).ready(function(){
    $("#edit_poll").click(function()
    {
       edit_poll();
    });

(id edit_poll不存在,这只是理论上的)

我找不到与我自己的问题相关的任何内容,对此我感到很困惑。我对 AJAX 还很陌生,但这真的让我感到困惑。我知道有办法,但我找不到。

$(document).ready(function(){
    $("#edit_poll").click(function()
    {
       var id=$(this).data("pollid");
       add_poll_answers(id);
    });
});

您的元素具有 data-pollid 属性的位置

创建一个包含此信息的按钮。

<button class="button primary addAnswer" type="button" data-pollid="30">Submit</button>

然后简单地让所有按钮(或 select 只是一些使用 class 的按钮)触发一个查找 ID 的函数。

$(document).ready(function(){
    $("button.addAnswer").click(function () {
        add_poll_answers($(this).data("pollid"));
    });
});

您需要一些方法来识别您要处理的按钮,然后您可以:

  1. 直接在他们身上挂钩click:

    $("button").on("click", function() {
        // Use `this` here to access the element, e.g.
        // its ID is `this.id`, or you can access a
        // data attribute via `$(this).attr("data-foo")`
        // or this.getAttribute("data-foo")
    });
    
  2. container 元素上挂钩 click 并告诉 jQuery 仅在这些按钮之一发生点击时通知您,看起来非常相似:

    $("selector for the container").on("click", "button", function() {
        // Use `this` here to access the element, e.g.
        // its ID is `this.id`, or you can access a
        // data attribute via `$(this).attr("data-foo")`
        // or this.getAttribute("data-foo")
    });
    

    这称为事件委托,在需要adding/removing 按钮的情况下它非常方便。

在上面,我只是使用 "button" 作为按钮的选择器,但当然你会想要更具体的东西——例如,你可以添加一个 class到有问题的按钮并改用 ".the-class"

#1 示例(直接处理点击):

$(".poll").on("click", function() {
  $("<p>")
    .html("You clicked " + $(this).attr("data-value"))
    .appendTo(document.body);
});
<div>
  <button type="button" class="poll" data-value="1">Choose 1</button>
  <button type="button" class="poll" data-value="2">Choose 2</button>
  <button type="button" class="poll" data-value="3">Choose 3</button>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

#2 示例(使用事件委托):

$("#container").on("click", ".poll", function() {
  $("<p>")
    .html("You clicked " + $(this).attr("data-value"))
    .appendTo(document.body);
});
<div id="container">
  <button type="button" class="poll" data-value="1">Choose 1</button>
  <button type="button" class="poll" data-value="2">Choose 2</button>
  <button type="button" class="poll" data-value="3">Choose 3</button>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


旁注:如果您不控制页面上脚本标记的位置,则只需使用 ready。如果这样做,只需将包含您的代码的脚本标记放在页面末尾,就在结束 </body> 标记之前。

如果你需要更多的元素来应用相同的,只需使用class属性来标识元素:

<button class="buttonClick button primary" type="button">Submit</button>

然后,用jQuery处理事件:

$(document).ready(function(){
    $(".buttonClick").click(function(){
       console.log($(this).attr('id')); //to get the id, class or whatever
    });
});
$(document).ready(function(){  
var a = document.querySelector(".theClasseYouWantToListen").textContent;
console.log(a)
    });

这就是我欺骗厄运的方式