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。我想看看这里涉及的所有代码。