在for循环中的PHP页面上使用Jquery/Ajax

在for循环中的PHP页面上使用Jquery/Ajax,php,jquery,ajax,Php,Jquery,Ajax,我最近了解到,当使用onclick时,对于按钮,字段名和按钮id必须是唯一的。虽然这不是问题,但根据脚本输出的行数,这可能会造成很大的浪费 例如,我有一个while循环,它对我服务器(minecraft)上的每个人都这样做,所以它可以是10,也可以是50 这是创建js对象的代码 $kickbtn .= " $('#kick_btn$k').click(function(event) { var player_name$k = jQuery('input[name=\"play

我最近了解到,当使用onclick时,对于按钮,字段名和按钮id必须是唯一的。虽然这不是问题,但根据脚本输出的行数,这可能会造成很大的浪费

例如,我有一个while循环,它对我服务器(minecraft)上的每个人都这样做,所以它可以是10,也可以是50

这是创建js对象的代码

  $kickbtn .= "    $('#kick_btn$k').click(function(event) { 
    var player_name$k = jQuery('input[name=\"player$k\"]').val()
    jQuery.get('testing.php?action=kick', { player_input: player_name$k} );
    alert('Successfully kicked');
  });\n\n";
这是表单数据

    <form name=\"$pdata[name]\" action=\"\">
      <input type=\"hidden\" name=\"player$k\" value=\"$pdata[name]\">
      <input type=\"submit\" id=\"kick_btn$k\" value=\"Kick Player\">
    </form>
  $k++;

只需要一个委托事件处理程序,这意味着将其附加到父/容器元素,除非您希望文档中有50多个单击处理程序,这将不必要地降低速度:

// bind to all elements starting with 'kick_btn' within #container
// (could even be 'body')
$("#container").delegate('[id^="kick_btn"]', "click", function(event) {

    // get the current player number from the id of the clicked button
    var num = this.id.replace("kick_btn", "");
    var player_name = jQuery('input[name="player' + num + '"]').val();
    jQuery.get('testing.php?action=kick', {
        player_input: player_name + num
    });
    alert('Successfully kicked');
});
参考:


虽然从减少的文档大小可以略微减少加载时间,但值得一提的是,尽管这种方法完全合理,但可能会导致客户端加载时间的总体增加,与文档中的元素数量成比例。OP最初的方法并不漂亮,但它需要更少的处理。@tomfumb-我将调整答案,甚至没有考虑单击处理程序的数量(感谢指针)。var num=this.id.replace(“kick_btn”,”);我认为这行有问题,num总是返回任何奇怪的东西,不应该是这样。看看这个最小的测试:@karim79谢谢-你刚刚向我介绍了委托函数,看起来非常有用
// bind to all elements starting with 'kick_btn' within #container
// (could even be 'body')
$("#container").delegate('[id^="kick_btn"]', "click", function(event) {

    // get the current player number from the id of the clicked button
    var num = this.id.replace("kick_btn", "");
    var player_name = jQuery('input[name="player' + num + '"]').val();
    jQuery.get('testing.php?action=kick', {
        player_input: player_name + num
    });
    alert('Successfully kicked');
});