Javascript 数组和while循环:使唯一可单击
我有一个数组(通过ajax)如下所示:Javascript 数组和while循环:使唯一可单击,javascript,jquery,arrays,while-loop,Javascript,Jquery,Arrays,While Loop,我有一个数组(通过ajax)如下所示: data[i].id: gives the id of user i data[i].name: gives the name of user i X Leonardo Da Vinci X Albert Einstein X William Shakespeare ... 我想像这样输出数组: data[i].id: gives the id of user i data[i].name: gives the name of user i X Le
data[i].id: gives the id of user i
data[i].name: gives the name of user i
X Leonardo Da Vinci
X Albert Einstein
X William Shakespeare
...
我想像这样输出数组:
data[i].id: gives the id of user i
data[i].name: gives the name of user i
X Leonardo Da Vinci
X Albert Einstein
X William Shakespeare
...
X是必须可单击的图像(X.gif)。单击时,它必须转到functiontwo(),传递参数数据[i].id。Functiontwo将打开一个jquery对话框,问题是“删除id数据[i].id”
我知道这不会太难做到,但我似乎无法理解。。。
这就是我到目前为止所做的:
function functionone() {
$.ajax({
type : 'POST',
url : 'post.php',
dataType : 'json',
success : function(data){
var message = "";
var i = 0;
while (i < (data.length - 1))
{
var myvar = data[i].id;
message = message + "<div class=" + data[i].id + "><img src=x.gif></div>" + data[i].name + "<br />";
$('#somediv').html(message).fadeIn('fast');
$("." + data[i].id + "").click(function () {
functiontwo(myvar);
});
i++;
}
}
});
}
function functiontwo(id) {
...}
,仅可单击最后一个X
我怎样才能解决这个问题?
非常感谢
编辑:
这是我的第二个功能:
function functiontwo(id) {
$("#dialogdelete").dialog("open");
$('#submitbutton').click(function () {
$('#submitbutton').hide();
$('.loading').show();
$.ajax({
type : 'POST',
url : 'delete.php',
dataType : 'json',
data: {
id : id
},
success : function(data){
var mess = data;
$('.loading').hide();
$('#message').html(mess).fadeIn('fast');
}
});
//cancel the submit button default behaviours
return false;
});
}
在delete.php中没有什么特别的,我使用了$\u POST['id']。通常的技巧是创建一个单独的函数来创建事件处理程序。单独的函数将接收i作为参数,生成的事件将能够为自己保留此变量
make_event_handler(name){
return function(){
functiontwo(name);
};
}
...
$("." + data[i].id + "").click( make_event_handler(myvar) );
正如我在评论中指出的那样。问题在于
。单击零件。可以使用bind,也可以为所有元素使用一个类,以及类似以下内容的click事件$('.classnamehere').live('click',function(){//stuff})代码>函数functionone(){
$.ajax({
键入:“POST”,
url:'post.php',
数据类型:“json”,
成功:功能(数据){
var message=“”;
var i=0;
而(i<(数据长度-1))
{
var myvar=data[i].id;
message=message+“”+数据[i]。name+“
”;
$('#somediv').html(message.fadeIn('fast');
i++;
}
}
});
}
$('.clickable').live('click',函数(){
警报($(this.attr('id')+'这是您的id');
});
第一步是使用绑定,而不是单击来创建事件侦听器。您能更具体一点吗?我尝试了$(“+data[id].id+”).bind('click',function(){make\u event\u handler(myvar)})代码>但这也不起作用…请看下面我的答案。课堂上的解决方案更简单,我认为这会起作用,但显然,一切都没有改变。最后一个X是可点击的,其余的不是…这应该可以做到。你能提供一个最小的功能示例(可能在JSFIDLE)吗?我已将部分更改为$(““+data[I].id+”).live('click',function(){functiontwo(myvar)})代码>。这确实使每个X都可以单击,但是,传递给函数的参数(在myvar的情况下)总是相同的:最后一个用户的id。您需要将数据[i].id作为id传递,而不是类。并对每个对象应用相同的类。可以在函数外部创建live listner。看到我的新答案了吗!谢谢!仔细观察后,它似乎没有发挥应有的作用。它正在传递参数,但它“记住”的时间太长:单击X会转到functiontwo(id),这会给用户一个jquerypopup,其中包含消息“Deletethis user?”,以及一个submit按钮。当您单击user1旁边的X时,关闭对话框(不按submit按钮),单击user3旁边的X并单击submit,不仅user3会被删除(这是它需要做的),user1也会被删除。。。这当然不是我想要的。。。如何解决最后一个问题?谢谢!这取决于第二个函数的工作方式。问题不在于这里贴的是什么。你有没有检查你的代码,确认ID是唯一的?是的,我确定ID是唯一的。我将编辑我的第一篇文章,并将我的第二个功能也放在那里。我想你的问题是,当你点击这个框时,你没有重置对话框的内容。使用Firebug(和FF)检查脚本(delete.php)何时加载。