【发布时间】:2020-09-13 05:13:42
【问题描述】:
在您认为之前已经回答过这个问题之前(我猜它在技术上已经回答过),让我指出与此类问题相关的任何其他帖子都具有不同的上下文,因此答案不适合我问题。
无论如何,为了简化情况,我有一个 UL 元素,其中包含一堆 LI,这些 LI 由 foreach 循环通过提供给页面的 JSON 对象生成。我希望能够删除行。到目前为止,一切都非常标准。我已经编写了一些非常标准的 JQuery/JS 来处理这个任务,但是由于一些特殊的原因,部分脚本正常运行,而部分脚本却不能正常运行(DOM 删除部分)。我尝试了至少 4 种不同的方式编写它,使用不同的函数来完成任务,甚至尝试将语句移动到函数的不同区域,以及函数本身的交替放置。
我还想说,由于我正在删除单个行,它们都由动态生成的 ID 标识,这(我怀疑)可能与我面临的问题有关。
这是代码本身,从按钮开始,以启动功能;
<button type="button" onclick="unsave({{$savedpost->id}})" class="btn float-right btn-dark my-auto" id="unsaveBTN{{$savedpost->id}}">Unsave</button>
如您所见,动态生成的 id 使用刀片语法。
这是按钮调用的实际 JQuery 脚本
<script defer>
function unsave(savedID){
// /saved/{savedid}/unsave
var saved = document.getElementById(savedID);
console.log(savedID);
$.ajax({
type: 'POST',
url: '/'+savedID+'/ajax',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
success: function(result) {
// append to popupDisplayList
if(result.success) {
saved.remove();
$('#popupDisplayList').append($('<li class="list-group-item alertGroup"><div class="alert alert-success alert-dismissible fade show" role="alert"><strong>Success!</strong> '+result.success+'<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div></li>'));
} else if (result.error) {
$('#popupDisplayList').append($('<li class="list-group-item alertGroup"><div class="alert alert-danger alert-dismissible fade show" role="alert"><strong>Error!</strong> '+result.error+'<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div></li>'));
} else { return }
}
});
};
</script>
我拥有的脚本,显然没有很好地优化,但它是尝试多种其他解决方案后脚本的当前状态,起初它只是一个脚本并进行了优化。
在脚本的一个版本中,我尝试在初始函数中向 div 添加一个类,然后如果名为 success 的变量返回为 true(当 AJAX 响应返回为 result.success 时会发生这种情况),则将其删除。然后我会删除该类的所有项目。显然这是一个非常迂回的方式,但我在这里感到绝望。
任何帮助将不胜感激。
编辑:
这是代码
<li class="pl-4 list-group-item" id="{{$savedpost->id}}">
<div class="row justify-content-between">
<div class="row pl-4">
<img class="img-fit-fluid" src="/storage/images/{{$savedpost->picture_link}}" alt="Saved post image">
<div class="row flex-column">
<h5 class="text-dark pl-5 align-middle">{{$savedpost->name}}</h5>
<p class="text-secondary pl-5 align-middle">{{$savedpost->desc_short}}</p>
</div>
</div>
<div class="btn-group" role="group">
<a href="/{{$savedpost->id}}" class="btn float-right btn-secondary my-auto">View</a>
<button type="button" onclick="unsave({{$savedpost->id}})" class="btn float-right btn-dark my-auto" id="unsaveBTN{{$savedpost->id}}">Unsave</button>
</div>
</div>
</li>
【问题讨论】:
-
你在 JS 中使用 {{$savedpost->id}} 得到 id 了吗?
-
可以添加有问题的 ul, li 吗?
-
如果是字符串插值,你能解释一下你想用“function unsave{{$savedpost->id}}()”实现什么,在这种情况下你应该只用它来传递参数从按钮(这将是你发布的 id),你的函数应该看起来像这样 function unsave(savedPostId)
-
Blade 是在前端 JS 构建之前加载的,所以当 JS 开始构建时,所有的 {{$savedpost->id}} 都会填写有问题的特定 ID,并且是的没问题给我一秒钟添加LI
-
我尝试将 ID 作为参数而不是在名称中传递,没有什么不同,我提供 ID 的方式并不重要,真正重要的是这一事实.remove() 函数无法正确执行,即使从客户端在 Chrome 上检查它时它看起来是正确的。
标签: javascript jquery laravel laravel-blade