Javascript 如何在单击事件之前等待渲染?
这个问题并不总是出现。如果我等待页面加载一段时间,或者如果我在点击之间等待足够的时间来更改此下拉菜单上的语言,那么它可以正常工作。这是一个简单的多语言网站 导航栏中的下拉列表如下所示:Javascript 如何在单击事件之前等待渲染?,javascript,meteor,internationalization,meteor-blaze,Javascript,Meteor,Internationalization,Meteor Blaze,这个问题并不总是出现。如果我等待页面加载一段时间,或者如果我在点击之间等待足够的时间来更改此下拉菜单上的语言,那么它可以正常工作。这是一个简单的多语言网站 导航栏中的下拉列表如下所示: .... <li class="dropdown"> <a class="dropdown-toggle" data-toggle="dropdown" href="#"> <img src="Pictures/BR-US-SP.png"><
....
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"> <img src="Pictures/BR-US-SP.png"><b class="caret"></b></a>
<ul class="dropdown-menu" id="langMenu">
<li><a href="#" id="pt-BR" name="pt-BR" value="pt-BR"><img src="/Pictures/1383607461_Brazil.png"></a></li>
<li><a href="#" id="en" name="en" value="en"><img src="/Pictures/1383615303_United-States.png"></a></li>
<li><a href="#" id="es" name="es" value="es"><img src="/Pictures/1383615325_Spain.png"></a></li>
<li class="divider"></li>
</ul>
</li>
....
Template.navigation.events({
'click #langMenu': function(event){
currentLang = $(event.target).attr('id');
...
// So some stuff with and re-renders page upon value of currentLang //
...
}
});
当它中断时,控制台显示变量currentLang未定义。因此,我假设这是因为没有及时呈现模板,单击事件无法获取其值。这个假设正确吗
如何确保始终获得currentLang值
对不起。我已经花了几天的时间来研究它了。然而,由于Meteor的发展如此之快,我对我发现并测试的许多可能的解决方案感到困惑,这些解决方案实际上都不起作用(不推荐?)。我无法通过Meteor文档准确了解如何使用Blaze函数、何时以及如何使用onRendered等。。。有好的例子吗
相反,我应该使用一种完全不同的方法来使用Iron路由器吗?如果是,那么怎么做?您必须将其排除在外。目前的ES5方法是
Template.navigation.events({
'click #langMenu': function(event){
setTimeout(function(){
currentLang = $(event.target).attr('id');
},100)
}
});
你必须把它挡在外面。目前的ES5方法是
Template.navigation.events({
'click #langMenu': function(event){
setTimeout(function(){
currentLang = $(event.target).attr('id');
},100)
}
});
问题可能是单击功能的选择器。我会这样做:
Template.navigation.events({
“单击菜单>li”:函数(事件){
currentLang=$(event.currentTarget.attr('id');
//做些事情。。。
}
});代码>问题可能是单击功能的选择器。我会这样做:
Template.navigation.events({
“单击菜单>li”:函数(事件){
currentLang=$(event.currentTarget.attr('id');
//做些事情。。。
}
});代码>嗨,GibbyGuy,我试过了,但仍然可以重现错误。这似乎减少了错误发生的次数,但这只是我的印象。我无法从统计学上证实这一点。我也尝试了1000,但仍然可以复制它。我在找lilke的东西“等到目标准备好了”或“想要直到模板x被呈现”。嗨,GibbyGuy,我试过了,但我仍然可以重现错误。这似乎减少了错误发生的次数,但这只是我的印象。我无法从统计学上证实这一点。我也尝试了1000,但仍然可以复制它。我在找lilke的东西“等到目标准备好了”或“想要直到模板x被呈现”。嗨,GibbyGuy,我试过了,但我仍然可以重现错误。这似乎减少了错误发生的次数,但这只是我的印象。我无法从统计学上证实这一点。我也尝试了1000,但仍然可以复制它。我在找lilke的东西“等到目标准备好”或者“在模板x呈现之前需要”。谢谢Choy。我以前就喜欢这个。。。虽然我没有注意到任何真正的变化。我甚至(再次)用#langMenu>li>a进行了测试,仍然可以重现错误。真的吗?使用event.currentTarget
而不是event.target
?我带着target
离开,因为带着event.currentTarget
我得到了未定义的。如果我添加行console.log(“currentTarget的值”,event.currentTarget)代码>它确实显示了,但随后我使用控制台.log(“currentTarget的值”,$(event.currentTarget.attr('id'))代码>它变得未定义
足够有趣。我测试了currentLang=event.target.id
,它成功了。但是,对于currentLang=event.currentTarget.id
则没有。我已经为每个HTML外部元素都添加了一个id,但它仍然返回未定义。我了解到我实际上不需要jQuery来获取id,但仍然无法计算currentTarget.Hmmm。我很想看看这里涉及的所有代码。谢谢蔡。我以前就喜欢这个。。。虽然我没有注意到任何真正的变化。我甚至(再次)用#langMenu>li>a进行了测试,仍然可以重现错误。真的吗?使用event.currentTarget
而不是event.target
?我带着target
离开,因为带着event.currentTarget
我得到了未定义的。如果我添加行console.log(“currentTarget的值”,event.currentTarget)代码>它确实显示了,但随后我使用控制台.log(“currentTarget的值”,$(event.currentTarget.attr('id'))代码>它变得未定义
足够有趣。我测试了currentLang=event.target.id
,它成功了。但是,对于currentLang=event.currentTarget.id
则没有。我已经为每个HTML外部元素都添加了一个id,但它仍然返回未定义。我了解到我实际上不需要jQuery来获取id,但仍然无法计算currentTarget.Hmmm。我很想看看这里涉及的所有代码。谢谢蔡。我以前就喜欢这个。。。虽然我没有注意到任何真正的变化。我甚至(再次)用#langMenu>li>a进行了测试,仍然可以重现错误。真的吗?使用event.currentTarget
而不是event.target
?我带着target
离开,因为带着event.currentTarget
我得到了未定义的。如果我添加行console.log(“currentTarget的值”,event.currentTarget)代码>它确实显示了,但随后我使用控制台.log(“currentTarget的值”,$(event.currentTarget.attr('id'))代码>它变得未定义
足够有趣。我测试了currentLang=event.target.id
,它成功了。但是,对于currentLang=event.currentTarget.id
则没有。我已经为每个HTML外部元素都添加了一个id,但它仍然返回未定义。我了解到我实际上不需要jQuery来获取id,但仍然无法计算currentTarget.Hmmm。我想看看这里涉及的所有代码。