jquery 点击函数声明在运行时计算变量
jquery click function declaration evaluates the variable at runtime
我正在尝试使用 css 和 div in this answer 创建通知。
但是我需要不止一个通知,所以我序列化了 div 的 ID。
问题是,当我声明点击函数时,变量 nname
没有被计算——只有当我点击关闭按钮时它才会被计算。所以只有最后一条通知被取消了。
如何使用变量 'nname' 的值声明一个函数?
我找到了 a similar post 但它是关于 zsh 的。
nc = 0;
function show_notification(data){
nname = "notification_" + nc
$('body').append('<div id="' + nname + '" class="notification" style="display: none;"><span class="dismiss"><a title="dismiss notification">x</a></span></div>');
$('#' + nname).fadeIn("slow").append('some new information');
$('#' + nname + ' .dismiss').click(function(){$("#" + nname).fadeOut("slow");});
nc++;
}
这是您问题的解决方案。
我已经在您的锚标记中给出了您的通知 ID 的数量,并提取了相同的数量以删除特定的通知。
nc = 0;
function show_notification(){
nname = "notification_" + nc
$('body').append('<div id="' + nname + '" class="notification" style="display: none;"> <span><a title="dismiss notification" class="dismiss" data-id = "'+nc+'" >Close</a></span> </div>');
$('#' + nname).fadeIn("slow").append('some new information');
nc++;
}
$(document).on("click",".dismiss",function() {
var findid = $(this).attr('data-id');
$("#notification_"+findid).fadeOut("slow");
});
show_notification();
show_notification();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
</body>
问题是每次调用 show_notification
时变量 nname
都不是唯一的 - 通过不添加 let
/var
/const
它成为一个全局变量,因此当您单击第一个 [x] 时,该变量已更改为指向最新的。
虽然有一些方法可以解决这个问题,但您可以通过使用 .appendTo
为您提供一个包含新内容的变量然后对该变量使用 jquery 方法来消除对增量 ID 的需求。
var newDiv = $("your html").appendTo("body");
newDiv.fadeIn();
在点击处理程序中,使用 this
和 DOM 导航关闭选定的弹出窗口。
....click(function() {
$(this).closest(".notification").fadeOut();
});
function show_notification(data) {
var newDiv = $('<div class="notification" style="display: none;"><span class="dismiss"><a title="dismiss notification">x</a></span></div>')
.appendTo("body");
newDiv.fadeIn("slow").append('some new information:' + data);
newDiv.find(".dismiss").click(function() {
$(this).closest(".notification").fadeOut("slow");
});
}
// Add some notifications
show_notification("1");
setTimeout(() => show_notification("two"), 500);
.dismiss { color: red; margin-right: 0.5em; border: 1px solid #FCC; cursor: pointer }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
我正在尝试使用 css 和 div in this answer 创建通知。
但是我需要不止一个通知,所以我序列化了 div 的 ID。
问题是,当我声明点击函数时,变量 nname
没有被计算——只有当我点击关闭按钮时它才会被计算。所以只有最后一条通知被取消了。
如何使用变量 'nname' 的值声明一个函数?
我找到了 a similar post 但它是关于 zsh 的。
nc = 0;
function show_notification(data){
nname = "notification_" + nc
$('body').append('<div id="' + nname + '" class="notification" style="display: none;"><span class="dismiss"><a title="dismiss notification">x</a></span></div>');
$('#' + nname).fadeIn("slow").append('some new information');
$('#' + nname + ' .dismiss').click(function(){$("#" + nname).fadeOut("slow");});
nc++;
}
这是您问题的解决方案。 我已经在您的锚标记中给出了您的通知 ID 的数量,并提取了相同的数量以删除特定的通知。
nc = 0;
function show_notification(){
nname = "notification_" + nc
$('body').append('<div id="' + nname + '" class="notification" style="display: none;"> <span><a title="dismiss notification" class="dismiss" data-id = "'+nc+'" >Close</a></span> </div>');
$('#' + nname).fadeIn("slow").append('some new information');
nc++;
}
$(document).on("click",".dismiss",function() {
var findid = $(this).attr('data-id');
$("#notification_"+findid).fadeOut("slow");
});
show_notification();
show_notification();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
</body>
问题是每次调用 show_notification
时变量 nname
都不是唯一的 - 通过不添加 let
/var
/const
它成为一个全局变量,因此当您单击第一个 [x] 时,该变量已更改为指向最新的。
虽然有一些方法可以解决这个问题,但您可以通过使用 .appendTo
为您提供一个包含新内容的变量然后对该变量使用 jquery 方法来消除对增量 ID 的需求。
var newDiv = $("your html").appendTo("body");
newDiv.fadeIn();
在点击处理程序中,使用 this
和 DOM 导航关闭选定的弹出窗口。
....click(function() {
$(this).closest(".notification").fadeOut();
});
function show_notification(data) {
var newDiv = $('<div class="notification" style="display: none;"><span class="dismiss"><a title="dismiss notification">x</a></span></div>')
.appendTo("body");
newDiv.fadeIn("slow").append('some new information:' + data);
newDiv.find(".dismiss").click(function() {
$(this).closest(".notification").fadeOut("slow");
});
}
// Add some notifications
show_notification("1");
setTimeout(() => show_notification("two"), 500);
.dismiss { color: red; margin-right: 0.5em; border: 1px solid #FCC; cursor: pointer }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>