2010-09-16 40 views
3

我的沙箱是在这里:http://9.latest.truxmap.appspot.com/为什么我的Javascript函数只能工作多次?

首先点击地图上的标记(如果有没有在页面加载时,检查“食品的卡车即将开业”导航控件箱)。接下来转到“评价”标签。

在GWT中,每当我打开标记时,我都会调用javascript函数resizeReviewTab(),它可以纠正由于状态和检查选项卡中的内容为动态而引起的样式问题。如果Javascript正常工作,那么您将看到STARS,而不是单选按钮浮动在“评论”选项卡中文本区域的正上方。否则,你会看到简单的单选按钮。

我无法弄清楚当标记DOESNT打开时会发生什么。它怎么能工作一次,然后不再,然后在几个不同的标记之后再工作?继承人的功能,这就是所谓的:

function resizeReviewTab(){ 

    $('#content').text(""); 

    $('.statusWindowB').css('height', $('.statusWindowA').css('height'));     

    $('.name-sliding').focus(function() { 

     $('.name-label-sliding').animate({ marginLeft: "133px" }, "fast"); 

      if($(this).val() == "name") 
       $(this).val() == ""; 

     }).blur(function() { 

      if($(this).val() == "") { 
       $(this).val() == "name"; 
       $('.name-label-sliding').animate({ marginLeft: "12px" }, "fast"); 
      } 
     });  

    $('.content-sliding').focus(function() { 
      $('.content-label-sliding').fadeOut("slow"); 
    }); 

    starify(); 
} 

starify()是与一些修改的jQuery插件jquery.stars的JavaScript,在这里看到:http://9.latest.truxmap.appspot.com/lib/jquery.rating.js

我需要调用这个函数,因为如果我只是负载它在html文档的开头,没有任何通过点击地图创建的信息窗口将其单选按钮变成星号。

这很麻烦,我期待着您的回复。谢谢!

+0

与工作演示一起玩和源代码的问题?我一定在做梦:)当我今天回到家时,我肯定会研究这个(调试GWT + JS可以是PITA:/)。 PS:你究竟如何调用'resizeReviewTab()'函数? – 2010-09-16 11:54:49

+0

无法在Firefox中重现,但在侧面注意X关闭弹出窗口不关闭弹出窗口。 – 2010-09-16 14:00:51

+0

@Igor,我打开信息窗口后打电话给resizeReviewTab()。 resizeReviewTab()在GWT中被定义为一个JSNI函数,它有一行:resizeReviewTab(); @TB,地图infowindow弹出窗口或弹出菜单栏的弹出窗口? – 2010-09-16 20:45:29

回答

1

通过@amurra给出的两个答案和@meouw是有效的,并可能造成在未来的问题。然而,在OP中询问问题的答案是GWT每次调用活动单元格时都会调用SelectionChangedHandler TWICE - 一次单元格被取消选择时,一次当另一个单元格被重新选择时。这导致JavaScript函数被两次调用,背靠背,这导致了讨厌的行为。非常感谢这个主题的帮助!

0

如果某个函数被多次调用,您可能需要在绑定之前解除绑定您的事件。这将有助于防止多重绑定,这可能会导致奇怪和不一致的结果。

function resizeReviewTab(){ 

$('#content').text(""); 

$('.statusWindowB').css('height',$('.statusWindowA').css('height'));     

$('.name-sliding').unbind("focus").focus(function() { 

    $('.name-label-sliding').animate({ marginLeft: "133px" }, "fast"); 

     if($(this).val() == "name") 
      $(this).val() == ""; 

    }).unbind("blur").blur(function() { 

     if($(this).val() == "") { 
      $(this).val() == "name"; 
      $('.name-label-sliding').animate({ marginLeft: "12px" }, "fast"); 
     } 
    });  

$('.content-sliding').unbind("focus").focus(function() { 
     $('.content-label-sliding').fadeOut("slow"); 
}); 

starify(); 

}

2

这些位肯定是破

if($(this).val() == "name") 
    // next line is checking whether val equals "" 
    // we already know it equals "name" 
    // so it returns false(which is discarded) 
    $(this).val() == ""; "name" , 

而且

if($(this).val() == "") { 
    // next line is checking whether val equals "name" 
    // we already know it equals "" 
    // so it returns false(which is discarded) 
    $(this).val() == "name"; 
    $('.name-label-sliding').animate({ marginLeft: "12px" }, "fast"); 
} 

我认为你的意思

if($(this).val() == "name") 
    $(this).val(''); // sets val to nothing 

而且

if($(this).val() == "") { 
    $(this).val("name"); // sets val to "name" 
    $('.name-label-sliding').animate({ marginLeft: "12px" }, "fast"); 
} 
+0

这是从一个jQuery插件直接复制 - 但你绝对正确,它没有多大意义。 – 2010-09-16 21:00:06

相关问题