-1

只要存在特定条件,我就会在循环中创建相同的按钮,并且我想为这些按钮运行相同的 jquery 事件处理程序。

问题是事件处理程序仅适用于生成的第一个按钮。

我的按钮是这样生成的:

<?php while($row_c= mysqli_fetch_array($result_comments))
{ ?>
<button name="comment" id="comment" class="button_comment" value="Post">Post</button>
<?php } ?>

我使用的jquery是这样的:

$('.button_comment').click(function()
{
    //some staff thats done here
});

应该怎么做,以便事件处理程序适用于生成的所有按钮?谢谢

4

4 回答 4

2

你的 jQuery 应该可以工作。请注意,您的按钮形成无效的 HTML/DOM:id元素上的必须是唯一的。但是由于您还使用了一个类(不必是唯一的),并且这就是您在 jQuery 选择器中使用的,所以它有效:Live Example | 资源

也许当您尝试它并且它不起作用时,您正在使用,由于该问题$("#comment").click(...),它不起作用。id

于 2013-10-19T16:35:10.623 回答
0

“应该怎么做,以便事件处理程序适用于生成的所有按钮?” 小提琴将是向我们展示您的问题背景的好方法;)

  • 您的代码是有效的,因为它会将处理程序附加到具有“button_comment”作为 CSS 类的每个元素

您是否将此代码放入 dom 就绪函数中?

$(function(){
    /* code here  */
});
  • 您可以使用事件委托 这意味着您必须将事件侦听器附加到这些按钮的第一个共同祖先。当许多元素必须触发相同的例程时,这是一个不错的选择,如果它们中的一些可能在未来通过 AJAX 添加到 DOM 中(这使页面不必附加许多事件处理程序)

委托语法

// Event delegation
$( "#Ancestor").on("click", '.button_comment', function() {
    alert( $( this ).val() ); 
});
于 2013-10-19T16:51:10.533 回答
0

从您的 php 代码中删除 ID。记住 ID 应该是唯一的元素。此外,将您的 jquery 从以下位置更改:

('.button_comment').click(function()
{
    //some staff thats done here
});

('.button_comment').on('click', function()
{
    //some staff thats done here 
});

on 事件将在您告诉它执行的时候执行您告诉它执行的操作,因此它几乎在运行时执行。如果您使用以前的代码,则该元素必须在页面加载时存在才能正常工作。

于 2013-10-19T17:24:46.200 回答
0
Check in firebug: 

  var buttoncomments = $('.button_comment'); 
    console.log(buttoncomments); 


Bind the control in question to a variable so you're certain that it's that one you're working with. 

$('.button_comment').click(function()
 {
     var that = $(this); 
于 2013-10-19T16:40:27.530 回答