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