JavaScript不使用jquery ajax表单重新加载,即使是在$(document).ready中

JavaScript不使用jquery ajax表单重新加载,即使是在$(document).ready中,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有此代码,用于使用切换显示更多/更少的我的评论。它工作得很好。然而,我有另一个用于添加注释的表单,该表单使用jqueryajax。因此,在添加表单后,脚本无法工作。我必须重新加载整个页面以显示它是否正常工作。在源代码中,我看到加载了脚本。它也位于正在重新加载的零件的侧面 也许我应该换衣服准备装货 编辑:onload也没有帮助;( $(文档).ready(函数(){ $(“.comment p”)。每个(函数(){ var val=$.trim(this.innerHTML); var par

我有此代码,用于使用切换显示更多/更少的我的评论。它工作得很好。然而,我有另一个用于添加注释的表单,该表单使用jqueryajax。因此,在添加表单后,脚本无法工作。我必须重新加载整个页面以显示它是否正常工作。在源代码中,我看到加载了脚本。它也位于正在重新加载的零件的侧面

也许我应该换衣服准备装货

编辑:onload也没有帮助;(


$(文档).ready(函数(){
$(“.comment p”)。每个(函数(){
var val=$.trim(this.innerHTML);
var parsed=val.split(/\s+/);
var cut=已解析;
//每一个字
for(var i=0,k=0;i50){
cut=parsed.slice(0,i);
打破
}
}
//如果一个长单词
如果(切割长度==0){
push(解析为[0]。子字符串(0,50));
}
val=切割连接(“”);
//如果文本足够长,可以剪切
if(cut.length!=parsed.length){
this.innerHTML=val.replace(/[,;?!]$/,“”)
+ "... ";
$("")
.css(“显示”、“无”)
.html(parsed.slice(cut.length).join(“”+“”)
.附于(本);
$("", {
href:“#”,
文本:“[显示更多内容]”
}).在“点击”时,功能(e){
var sh=this.innerHTML==“[显示更多]”;
$(this).prev(“span”).toggle(sh).prev(“span”).toggle(sh);
this.innerHTML=sh?”[show less]:“[show more]”;
e、 预防默认值();
}).附于(本);
}否则{
this.innerHTML=val;
}
});
});
编辑:我的ajax调用如下所示(我使用的是CodeIgniter):

$.ajax({
url:“”,
键入:“POST”,
数据:表格数据,
成功:功能(msg){
var pathname=window.location.pathname;
$('.comments-tbl-div').load(路径名+'.comments-tbl-div');
$(“#评论表单部分”).html(msg);
}
});

问题在于就绪事件只触发一次(加载文档时)。ajax引擎在就绪文档之后触发成功事件。因此,您应该重新调用showMore引擎

首先,将代码放入可调用函数中

<script>
        function showMoreEngine($els) {
            $els.each(function() {
            var val = $.trim(this.innerHTML),
                parsed = val.split(/\s+/),
                cut = parsed;

            // for each word
            for (var i = 0, k = 0; i < parsed.length; i++) {
                k += parsed[i].length + 1;

                if (k - 1 > 50) {
                    cut = parsed.slice(0, i);
                    break;
                }
            }

            // if one long word
            if (cut.length == 0) {
                cut.push(parsed[0].substring(0, 50));
            }

            val = cut.join(" ");

            // if the text is long enough to cut
            if (cut.length != parsed.length) {
                this.innerHTML = val.replace(/[.,;?!]$/, "")
                    + "<span>...</span> ";

                $("<span />")
                    .css("display", "none")
                    .html(parsed.slice(cut.length).join(" ") + " ")
                    .appendTo(this);

                $("<a />", {
                    href : "#",
                    text : "[show more]"
                }).on("click", function(e) {
                    var sh = this.innerHTML == "[show more]";
                    $(this).prev("span").toggle(sh).prev("span").toggle(!sh);
                    this.innerHTML = sh ? "[show less]" : "[show more]";
                    e.preventDefault();
                }).appendTo(this);
            } else {
                this.innerHTML = val;
            }
        });
        }
</script>
在ajax引擎中

 $.ajax({
        url : "<?php echo site_url('comments/add'); ?>",
        type : 'POST',
        data : form_data,
        success : function(msg)
                  {
                        var pathname = window.location.pathname;
                        // added here a callback function
                        $('.comments-tbl-div').load(pathname + ' .comments-tbl-div',{},function() {showMoreEngine( $(this).find('.comment p') )});
                        $('#comment-form-part').html(msg);
                        showMoreEngine( $('#comment-form-part').find('.comment p') );
                    }
                });
$.ajax({
url:“”,
键入:“POST”,
数据:表格数据,
成功:功能(msg)
{
var pathname=window.location.pathname;
//这里添加了一个回调函数
$('.comments tbl div').load(路径名+'.comments tbl div',{},函数(){showMoreEngine($(this.find)('.comment p'))});
$(“#评论表单部分”).html(msg);
showMoreEngine($(“#注释表单部分”).find(“.comment p”);
}
});

我认为您可以优化代码……但这可能是一个起点。

Hmm,我尝试过,但仍然需要重新加载页面。我认为这与AJAX的异步行为有关。因此,我认为我需要在$('.comments tbl div').load(路径名+'.comments tbl div')之后触发showMoreEngine;……现在,我认为它在重新加载内容之前正在执行showMoreEngine,即使它是在以后的代码中。你能建议一些技术如何实现这一点吗?是的,我注意到了div加载。对不起,我现在没有文档。但是你应该看看在上次ajax调用后如何调用函数。我不理解你的
$('.comments-tbl-div').load(pathname+'.comments-tbl-div');
。这不是url。这是什么?它是重新加载的页面的一部分,而不是整个页面。我想我将开始一项奖励,我需要解决使用ajax时不重新加载的问题。
<script>
        function showMoreEngine($els) {
            $els.each(function() {
            var val = $.trim(this.innerHTML),
                parsed = val.split(/\s+/),
                cut = parsed;

            // for each word
            for (var i = 0, k = 0; i < parsed.length; i++) {
                k += parsed[i].length + 1;

                if (k - 1 > 50) {
                    cut = parsed.slice(0, i);
                    break;
                }
            }

            // if one long word
            if (cut.length == 0) {
                cut.push(parsed[0].substring(0, 50));
            }

            val = cut.join(" ");

            // if the text is long enough to cut
            if (cut.length != parsed.length) {
                this.innerHTML = val.replace(/[.,;?!]$/, "")
                    + "<span>...</span> ";

                $("<span />")
                    .css("display", "none")
                    .html(parsed.slice(cut.length).join(" ") + " ")
                    .appendTo(this);

                $("<a />", {
                    href : "#",
                    text : "[show more]"
                }).on("click", function(e) {
                    var sh = this.innerHTML == "[show more]";
                    $(this).prev("span").toggle(sh).prev("span").toggle(!sh);
                    this.innerHTML = sh ? "[show less]" : "[show more]";
                    e.preventDefault();
                }).appendTo(this);
            } else {
                this.innerHTML = val;
            }
        });
        }
</script>
   $(document).ready(function(e) { showMoreEngine($(".comment p"))});
 $.ajax({
        url : "<?php echo site_url('comments/add'); ?>",
        type : 'POST',
        data : form_data,
        success : function(msg)
                  {
                        var pathname = window.location.pathname;
                        // added here a callback function
                        $('.comments-tbl-div').load(pathname + ' .comments-tbl-div',{},function() {showMoreEngine( $(this).find('.comment p') )});
                        $('#comment-form-part').html(msg);
                        showMoreEngine( $('#comment-form-part').find('.comment p') );
                    }
                });