脚本在AJAX加载的DIV中不起作用,只加载了html?

My JavaScript is not working after ajax response i know that i have to use $('.ajax-link').on('click', 'a', function (e){ function for it but when i am using this mye.preventDefault(); is not working (means whole page is loading instead of ajax call) and if i am using $('a.ajax-link').click(function (e) { then ajax is working fine but all script of ajax response page is not working after ajax response . i am using jquery 1.10. below is my whole code :

$('a.ajax-link').click(function (e) {
        NProgress.start();
        if (msie) e.which = 1;
        if (e.which != 1 || !$('#is-ajax').prop('checked') || $(this).parent().hasClass('active')) return;
        e.preventDefault();
        $('.sidebar-nav').removeClass('active');
        $('.navbar-toggle').removeClass('active');
        $('#loading').remove();
        $('#dvLoading').show();
        var $clink = $(this);
        History.pushState(null, null, $clink.attr('href'));
        $('ul li.active').removeClass('active');
        $clink.parent('li').addClass('active');
    });

    History.Adapter.bind(window, 'statechange', function () { // Note: We are using statechange instead of popstate
        var State = History.getState(); // Note: We are using History.getState() instead of event.state   



    $.ajax({
        url: State.url,
        success: function (msg) {
           $('#dvLoading').fadeOut(10);
            NProgress.inc();
            $('.main-sec').html($(msg).find('.main-sec').html());
             NProgress.inc();
            setTimeout(function() { NProgress.done(); $('.fade').removeClass('out'); }, 100);
            $('#loading').remove();
            $('.main-sec').fadeIn();
            var newTitle = $(msg).filter('title').text();
            $('title').text(newTitle);
            docReady();
        }
    });
});

展开翻译

译文

我的JavaScript在ajax响应后无效我知道我必须使用 $('。ajax- 链接')。on('click','a',function(e){</ code>
for function for it但是当我使用它时,我的 e.preventDefault(); </ code>不起作用 (意味着整个页面正在加载而不是ajax调用)如果我正在使用 $('a.ajax-link')。单击(函数(e){</ code>然后ajax工作正常但所有脚本都是 ajax响应页面在ajax响应后无效。我正在使用 jquery 1.10 </ code>。下面是我的全部代码:</ p>

  $('a.ajax- 链接')。click(function(e){
NProgress.start();
if(msie)e.which = 1;
if(e.which!= 1 ||!$('#is-) ajax')。prop('checked')|| $(this).parent()。hasClass('active'))return;
e.preventDefault();
$('。sidebar-nav')。 removeClass('active');
$('。navbar-toggle')。removeClass('active');
$('#loading')。remove();
$('#dvLoading')。 show();
var $ clink = $(this);
History.pushState(null,null,$ clink.attr('href'));
$('ul li.active')。removeClass('active');
$ clink .parent('li')。addClass('active');
});

History.Adapter.bind(window,'statechange',function(){//注意:我们使用的是statechange而不是 popstate
var State = History.getState(); //注意:我们使用History.getState()而不是event.state

$ .ajax({
url:State.url,
success:function(msg){
$ ('#dvLoading')。fadeOut(10);
NProgress.inc();
$('。main-sec')。html($(msg).find('。main-sec')。html ());
NProgress.inc();
setTimeout(function(){NProgress.done(); $('。fade')。removeClass('out');},100);
$( '#loading')。remove();
$('。main-sec')。fadeIn();
var newTitle = $(msg).filter('title')。text();
$ ('title')。text(newTitle);
docReady();
}
});
});
</ code> </ pre>
</ div>

1个回答

You can append manually the scripts tag to your document :

$.ajax({
    url: State.url,
    success: function (msg) {
      var scripts = $("<div>").html(msg).find( "script");
      scripts.each(function(){
          $('body').append($(this)[0]);
        }
    }
});

or you could use the AMD pattern, take a look at requirejs: http://requirejs.org/

dongqiulei6805
dongqiulei6805 RequireJS允许您在模块中组织代码(如在nodejs中)并在需要时需要它们,或者将它们捆绑在缩小的js文件中。 它还避免重写变量和函数名称,因为所有代码都包含在函数中,它非常有用。 但是如果您从未听说过它,阅读文档,也许您可​​以在另一个未来的项目中实现它,这有点棘手。
接近 5 年之前 回复
douxi2670
douxi2670 我编辑了我的回复,它对我有用,有点hackish但它有效
接近 5 年之前 回复
duanmeng3126
duanmeng3126 有没有其他方式或如何在我的情况下使用AMD模式你能解释更多吗?
接近 5 年之前 回复
doujiu8479
doujiu8479 我正在使用内联脚本
接近 5 年之前 回复
dongtiao2105
dongtiao2105 然后尝试使用$ .getScript(scriptSRC),如果它们不是内联的
接近 5 年之前 回复
dongyulian5801
dongyulian5801 它不工作!
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!