0

私は次の機能を持っています:

$(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 要求の後にページに表示されるボタンの呼び出しですか?

誰かがこれで私を助けてくれることを願っています?? 助けてくれてありがとう!

4

1 に答える 1

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

})

于 2012-05-29T18:16:46.203 に答える