jQuery live无法正常工作

时间:2011-10-18 19:39:32

标签: javascript jquery ajax load live

我遇到了ajax请求和简单<input type="submit"/>的问题。

我用来在其他视图中加载视图,模块化我的意思是,jquery使用.load(url)从一个视图到另一个视图。 所以问题是,如果我在view_1中加载view_2并且view_2的js脚本在view_1内,我需要使用live('click')来从view_2启动xhr请求,所以当我尝试启动时3 (multiple) xhr at same time ,而不是只有1,不知道为什么。

我唯一知道的是:

  1. 在view_1中使用live('click')启动3个多重XHR。
  2. 在view_1中使用click()它不起作用(显然我认为)。
  3. 直接在view_2中使用click()它可以工作(但我不能使用js 在加载的视图中,我只能在“父母”视图中使用js)
  4. 函数非常简单,真的不知道为什么我有这个问题(我也禁用了在ajax beforeSend中提交)检查这是一个view_1代码,它运行在加载的view_2上并启动3 XHR点击:|

    $(document).ready(function(){ 
       $('#save-doc').live('click',function(){
        var _title = $('#doc-title').val();
        var _doc = $('#doc-doc').val();
        update_doc(url_update_doc,{'title':_title,'doc':_doc,'id_doc':_choosed_doc,'id_project':id_project},this);
        });
    });
    function update_doc(_url,_data,_starter){
        $.ajax({
            type:'POST',
            data:_data,
            url:_url,
            dataType:'json',
            beforeSend:function(){
                $('.ajax-loading').show();
                $(_starter).attr('disabled','disabled');
            },
            error:function(){
                $('.ajax-loading').hide();
                $(_starter).removeAttr('disabled');
            },
            success:function(json){
                $('.ajax-loading').hide();
                $(_starter).removeAttr('disabled');
                if(json.error){
                    $('#error-title').html(json.error_title);
                    $('#error-doc').html(json.error_doc);
                    $.scrollTo('.append-form-edit-doc','fast');
                }
                if(json.confirm){
                   $.scrollTo('#top','fast');
                   $.gritter.add({
                       title:'Document Saved',
                       text:json.confirm
                   });
               }
            }
        });
    }
    

2 个答案:

答案 0 :(得分:2)

如果这是表单中的提交按钮,那么除非您阻止默认操作,否则将提交表单。 (那占了2个帖子,但不是3个。)

答案 1 :(得分:2)

请记住.live()将事件处理程序绑定到文档本身。考虑到这一点,它会在每次点击时在整个文档中搜索#save-doc。

如果文档中有多个带有“save-doc”ID的元素,那么它们都会被触发。

但是,我打赌发生在你身上的是你可能有多个表单分层,这些表单都是由这一个输入执行的。

编辑:第三种可能性,是Pointy提到的。通过事件处理程序执行提交,并因浏览器行为而发生另一次提交。

请提供HTML以及正在加载的内容。