2012-05-28 114 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(); 
}); 

})