为什么我的Javascript函数只能工作几次?

时间:2010-09-16 11:23:52

标签: javascript jquery gwt jquery-plugins jquery-selectors

我的沙箱在这里:http://9.latest.truxmap.appspot.com/

首先点击地图上的标记(如果页面加载时没有标记,请检查导航小部件中的'即将开放的食物卡车'框)。接下来转到“评论”标签。

在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文档的开头加载它,那么点击地图创建的信息窗口都不会将它们的单选按钮变成星星。

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

3 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:1)

@amurra和@meouw给出的两个答案是有效的,可能会在将来引起问题。然而,问题的答案要求OP中的是GWT调用SelectionChangedHandler TWICE,每次更改活动单元格时 - 一次取消选择单元格时,以及一次重新选择另一个单元格时。这导致javascript函数被调用两次,背靠背,这导致了令人讨厌的行为。非常感谢这个帖子的帮助!

答案 2 :(得分: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();  

}