2012-05-28 112 views
0

我有以下功能後響應:javascript函數不是Ajax請求(XMLHttpRequest的)

$(function() { //add new language 
    var lg_select = $('#add_language'); 
    var table = lg_select.parent(); 
    var table_head = $('form[name=languageData] tr').has('th') 
    $('.cv_addLang').click(function(e) { 
     e.preventDefault(); 
     if(table_head.is(':hidden')) { 
      $('.nolangauge').hide(); 
      table_head.show(); 
     } 
     var new_lang = lg_select.clone(); 
     new_lang.find('select[disabled=disabled]').removeAttr('disabled'); 
     new_lang.find('select[name=new_language]').attr('name', 'language[]'); 
     new_lang.find('select[name=new_level]').attr('name', 'language_level[]'); 
     new_lang.appendTo(table).show(); 
    }) 
}) 

function getXMLHttpRequestObject() { //ajax 
    var ajax = false; 
    if(window.XMLHttpRequest) { 
     ajax = new XMLHttpRequest(); 
    } else if(window.ActiveXObject) { 
     try { 
      ajax = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch(e) { 
      try { 
       ajax = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch(e) { 
      } 
     } 
    } 
    return ajax; 
} 

$(function() { //ajax 
    var ajax = getXMLHttpRequestObject(); 
    if(ajax) { 
     $('div').delegate(".but_cv_w", "click", function(e){ 
      e.preventDefault(); 
      var div_content = $(this).parent().parent(); 
      if(div_content) { 
       var x=$(div_content).attr('id'); 
       //alert(x); 
       //alert(div_content); 
       var path = $(this).attr('href'); 
       //alert(path); 
       ajax.open('get', path + '&ajax=true'); 
       ajax.onreadystatechange=function() { 
        if(ajax.readyState == 4) { 
         if((ajax.status == 200) || (ajax.status == 304)) { 
          $(div_content).html(ajax.responseText); 
         } else { 
          $(this).click; 
         } 
        } 
       } 
       ajax.send(null); 
       return false; 
      } 
     }) 
    } 
}) 

的問題是,無論是新的語言和阿賈克斯都工作正常,但分離。如果我刪除了ajax函數,那麼新的語言函數正在工作,但如果我保留ajax函數併發出ajax請求,那麼另一個函數(新語言)就不再工作了。它接受了ajax請求後,新的語言功能不能用於ajax請求。 新的語言函數應該爲語言添加新的輸入,「cv_addLang」是在普通的服務器請求之後或在ajax請求之後出現在頁面上的按鈕的名稱?

希望有人能幫助我這個?? 感謝您的幫助!

+5

你似乎是使用jQuery,爲什麼不使用它的AJAX包裝?這將使事情變得更簡單。 –

回答

0

問題在於添加新的語言功能。而不是一個點擊事件,它是需要使用委託事件,所以這個函數應該看起來像這樣才能工作。

$(function() { //add new language 
$("body").delegate('.cv_addLang','click',function(e) { 
    e.preventDefault(); 
    var lg_select = $('#add_language'); 
    var table = lg_select.parent(); 
    var table_head = $('form[name=languageData] tr').has('th'); 
    if(table_head.is(':hidden')) { 
     $('.nolangauge').hide(); 
     table_head.show(); 
    } 
    var new_lang = lg_select.clone(); 
    new_lang.find('select[disabled=disabled]').removeAttr('disabled'); 
    new_lang.find('select[name=new_language]').attr('name', 'language[]'); 
    new_lang.find('select[name=new_level]').attr('name', 'language_level[]'); 
    new_lang.appendTo(table).show(); 
}); 

})