jQuery - 等待用户输入

时间:2010-12-30 20:44:42

标签: javascript jquery jquery-ui

我正在经历一个令人讨厌的问题。在这里:

我的脚本上传文件并使用JSON编码对象作出响应,该对象包含需要其他信息的文件ID号。

现在,问题。我想显示一个对话框(表单)并等待用户填写它,通过AJAX将其发送回服务器,然后对第二个ID号重复相同的过程,依此类推。

我尝试使用$ .each执行此操作,但未成功。我读取$ .each可以通过在回调函数中返回false来终止,但是我没有找到任何提及如何等待事件的事件(让我们说我的表单中的提交按钮被点击)然后继续循环。

美好的一天

解决方案:

coll_id = 0;      // collection pointer

collection = [
    {
        id : 4,
        fileName : 'somefile.mp3'
    },
    {
        id : 6,
        fileName : 'anotherFile.mp3'
    }
];

function openDialog(){

    $('#browser-add-files-id3').bind('dialogclose', function(){
        if(coll_id >= collection.length-1){
            try{
                closeDialog(collection[coll_id].id);
            }
            catch(err){

            }

            coll_id++;
        }
        else {
            closeDialog(collection[coll_id].id);
            coll_id++;
            openDialog();
        }
    });

    $('#id3-file').text(collection[coll_id].fileName);
    $('#browser-add-files-id3').dialog('open');
}

function closeDialog(mid){
    // $.post to /url/param/mid
    // cleanup the input fileds in dialog
}

1 个答案:

答案 0 :(得分:0)

您不能将异步行为与同步的.each()混合使用。你可以做的是用.each()遍历所有项目,并检查你是否找到了一个尚未处理的项目。如果是这样,则将其标记为已处理,触发异步请求,然后返回false以停止每个()。

在异步成功回调中,您只需再次触发.each()循环,它将跳过所有已处理的项目,如果找到一个尚未处理的项目,请将其标记为此并启动异步请求等

为了将项目标记为已处理,我建议使用jQuery的数据函数使用$(item).data('processed', true)或类似内容。