2012-05-28 2 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 новая функция языка не работает с швом, как и для запроса ajax. Предполагается, что новая функция языка добавит новые входы для языков, «cv_addLang» - это заглавные буквы кнопки, которая появляется на странице после обычного запроса на сервер или после запроса ajax?

Надеюсь, кто-то может мне помочь с этим? Спасибо за любую помощь!

+5

Вы по всей видимости, с помощью JQuery, почему бы не использовать его AJAX оберток? это упростит ситуацию в целом. –

ответ

0

Проблема заключается в добавлении новой языковой функции. Вместо события click необходимо использовать событие делегата, поэтому функция должна выглядеть так, чтобы он работал.

$(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(); 
}); 

})

Смежные вопросы