我的网络应用可能会不时显示消息。一些消息是信息:
<div class="message">Here is some info.</div>
并且有些消息是错误:
<div class="error message">jQuery is not your friend.</div>
我希望用户能够从屏幕上清除信息性消息,但错误需要保留,我想我可以通过在每条消息上添加点击关闭功能来实现。
此类有效:)
$(document).ready(function() {
$('.message:not(.error)').each(function() {
theBox = this;
$(theBox).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $(theBox).fadeOut( 1000 ); })
});
});
排序。如果屏幕上只有一条信息消息,它可以正常工作,但如果有两条消息,则只有第二条消息被隐藏,无论我点击哪一个。
点击后,你能帮我告诉每个<div>
关闭吗?
答案 0 :(得分:4)
theBox
发生了变化。在内部回调中使用$(this)
。
$(document).ready(function() {
$('.message:not(.error)').each(function() {
$(this).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $(this).fadeOut( 1000 ); })
});
});
答案 1 :(得分:2)
在点击事件中使用此:
$(document).ready(function() {
$('.message:not(.error)').each(function() {
theBox = this;
$(theBox).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $(this).fadeOut( 1000 ); })
});
});
theBox 将在函数RUNS(文档就绪)中引用该对象。如你所知,click事件将引用theBox的最后一个值。您需要click事件中引用的当前对象。在click事件的范围内,它是 this 。
答案 2 :(得分:2)
我删除了Box变量(并且只使用了$(this))并且它工作正常。
$(document).ready(function() {
$('.message:not(.error)').each(function() {
$(this).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $(this).fadeOut( 1000 ); })
});
});
答案 3 :(得分:1)
我认为改变你的代码是这样的:
$(document).ready(function() {
$('.message:not(.error)').each(function() {
theBox = this;
$(theBox).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $(this).fadeOut( 1000 ); })
});
});
应该修复它。
答案 4 :(得分:0)
这应该这样做
$(document).ready(function() {
$('.message:not(.error)').each(function() {
theBox = this;
$(theBox).css('cursor','pointer')
.attr('title','Click to close')
.click( function(){ $('.message').fadeOut( 1000 ); })
});
});
答案 5 :(得分:0)
由于您希望在单击邮件时关闭所有邮件,因此使用.each()
方法不利于优化,并会降低代码速度。请尝试使用event.target
或this
来确定要关闭的元素:
var theBox = $('.message:not(.error)');
theBox.css('cursor','pointer')
.attr('title','Click to close')
.click(function(e){$(e.target).fadeOut( 1000 );});
答案 6 :(得分:0)
您将theBox
定义为全局变量。如果您使用var theBox
来声明局部变量,它将起作用。