当我在ajax中添加一个按钮时,onclick函数
onclick funtion when I add a button in ajax
我想使用AJAX来获取信息。如果成功,我想将数据附加到一个表中。此外,在每个tr
中,我都添加了一个按钮,如果我单击该按钮,我希望触发一个事件。因此,我只是在表中添加一个带有onclick
函数的按钮。而onclick
功能不起作用。有人知道为什么吗?以及我如何才能达到目标?
这是代码:
$.ajax({
url: 'https://api.instagram.com/v1/tags/'+tag+'/media/recent',
type: "GET",
dataType: "jsonp",
cache: false,
data:{
access_token: access_token,
count: count
},
success: function(data){
for(var x in data.data){
var html="";
tdHtml +="<tr><td>"+"<a href='"+data.data[x].link+"'><img src='"+data.data[x].images.thumbnail.url+"'></img></a>"+"</td>"+
"<td class='text-center'>"+data.data[x].caption.from.username+"</td>"+
"<td class='text-center'>"+data.data[x].likes.count+"</td>"+
"<td>"+create_time+"</td>"+
"<td>"+tags+"</td>"+
"<td>"+"<button id='addUsers' class='btn btn-primary btn-xs' onclick='addUsers()'>Add Users to a Group</button>"+"</td></tr>";
}
}
});
编辑:实际上,onclick
函数是这样的:
"<td>"+"<button id='addUsers' class='btn btn-primary btn-xs' onclick='addUsers('"+data.data[x].caption.from.username+"')'>Add Users to a Group</button>"+"</td></tr>";)'>Add Users to a Group</button>"+"</td></tr>";
一旦我点击按钮,我就可以使用我通过AJAX获得的数据用户名做一些事情。然而,即使我写得很简单,它也不起作用。例如:
function addUsers(name){
console.log(name);
}
无法安慰该名称。存在未定义的错误,或者发生了其他错误。
因此,我的目标是从开发人员那里获得响应(完成),将其附加到html中的表中(完成)并单击按钮(以前是附加的),用附加的信息做更多的事情。在这里,我想把这个名字添加到一个特定的列表中。
您的报价搞砸了:
"<td>"+"<button id='addUsers' class='btn btn-primary btn-xs' " +
"onclick='addUsers('""+
data.data[x].caption.from.username+
"'")'>Add Users to a Group</button>"+
"</td></tr>";
注意'"
包装了addUsers
的参数。
我认为按钮导致回发,因此再次重新加载页面试着用这个代替按钮
<input type='button' id='addUsers' class='btn btn-primary btn-xs' onclick='addUsers()' value='Add Users to a Group' />
让我描述另一种实现这一点并避免重复事件属性的方法:
-
创造一个类。例如,让我们简单地称之为
addUsersButton
。 -
在动态创建按钮时,将此类添加到按钮中:
tdHtml += /* ... other code here */ + "<button class='btn btn-primary btn-xs addUsersButton'>Add Users to a Group</button>";
请注意,没有
onclick
属性。 -
现在,使用
event delegation
定义以下处理程序:$(document).on('click', 'addUsersButton', function() { var username = $(this).parent().find('td:eq(1)').text(); addUsers(username); });
现在,您的所有
addUsersButtons
都将触发此事件,无论它们是否是动态生成的。$(this).parent().find('td:eq(1)').text()
将起作用,因为您将data.data[x].caption.from.username
存储在当前行的第二个单元格中。然而,使用这种方法并不是一个好主意。您可以声明某种data-username
属性,并使用$(selector).data('username')
对其进行访问。
我建议您使用事件委派,下面是示例:
html:
<button id="addContentBtn"> add content to table</button>
<table id="testTbl"></table>
js
$(document).ready(function() {
("#addContentBtn").click(function(){
var str="<tr><td>1</td><td><button>button</button></td></tr>" +
"<tr><td>2</td><td><button>button</button></td></tr>" ;
$(str).appendTo("#testTbl");
})
//this is event delegation
$("#testTbl").on("click","button",function(){
alert("clicked");
})
});
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 禁用旋转木马中的下一个按钮和上一个按钮
- 做一个复活节彩蛋,JS动作点击5个按钮
- 如何在用户返回和上一个按钮时刷新下拉列表
- 测试一个简单的javascript按钮
- 如何创建一个“;显示更多“;按钮,并指定最初可以显示的文本行数
- 简单的垂直上一个和下一个按钮代码点击上下移动jQuery
- 按下一个HTML按钮,该按钮使用一个功能在同一个新窗口中打开URL
- HTML5历史记录-返回上一个完整页面按钮
- 两个提交按钮(一个隐藏,一个可见)
- 击倒阵列按钮一个功能
- 如何为jQuery中的每个数组元素附加不同的动画效果?并用2个按钮一个接一个地向前和向后设置动画(后退和下一步)
- 两个按钮一个窗体
- 如何提交单个表单并使用两个提交按钮一个按钮单击然后验证
- Jquery表单-两个按钮-一个使用ajax,一个不使用
- 多个PHP按钮?(一个按钮是提交按钮,其他按钮是函数)
- PHP表单- 2个按钮(一个销毁会话和重新加载页面和一个继续到下一页)
- 给按钮一个类,并使用javascript来挑选点击事件不工作