2011-10-18 104 views
0

我有問題的ajax請求和簡單的<input type="submit"/>jQuery live不按預期方式工作

我用它來加載其他視圖,模塊化的意思,與jQuery使用.load(url)從一個視圖到另一個視圖。 所以問題是,如果我加載view_1裏面view_1和js腳本view_2裏面view_1我需要使用live('click')例如從view_2啓動一個xhr請求,所以當我嘗試啓動3 (multiple) xhr at same time,而不是在1時間,不知道爲什麼。

我唯一知道的是:

  1. 使用live('click')在view_1它推出3多XHR。
  2. 使用click() in view_1它不起作用(顯然我認爲)。
  3. 使用click()裏面直接view_2它工作(但我不能使用加載JS意見 ,我可以用js只能在「父母」的觀點)

功能也很簡單,真的沒有知道爲什麼我有這個問題(我也禁用提交在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 
       }); 
      } 
     } 
    }); 
} 
+0

任何機會你有多個ID爲'save-doc'的元素? –

+0

您嘗試添加「返回false」嗎?到「點擊」處理程序的末尾? – Pointy

+0

@Shadow Wizard nope id是id :) .. – sbaaaang

回答

2

如果這是一個提交按鈕形式裏面那麼除非你阻止的默認操作,表單將被提交。 (這將佔用2個POST,但不是三個。)

2

請記住,.live()將事件處理程序綁定到文檔本身。考慮到這一點,它會在每次點擊時在整個文檔中搜索#save-doc。

如果文檔中有多個元素與'save-doc'ID,那麼他們都會被觸發。

但是,我敢打賭發生在你身上的是你可能有多個表單分層,這一切都是由這一個輸入執行的。

編輯:第三種可能性是Pointy提到的。通過您的事件處理程序執行提交以及由於瀏覽器行爲而發生的另一個提交。

請提供HTML以及正在加載的內容。