停止功能执行是输入元素有焦点吗?

时间:2010-08-06 01:39:58

标签: jquery

我无法找到这个问题的好答案。我正试图用JQuery更好地处理一些更漂亮的外观/表演形式元素。这是我到目前为止使用的代码:


$(document).ready(function() {
        $('.input').addClass('inputOut clear'); // Grey out text initially, default bg

        $('.input').each(function() { // Fill in form fields with labels
            var text = getAttr($(this));
            $(this).attr("value", text);
            $(this).hasfocus = false;
        });

        $('.input').mouseover(function() {
            if ($(this).hasfocus == true) return;
            else {
                var text = getAttr($(this));
                $(this).removeClass();
                if($(this).attr("value") == text) $(this).addClass('inputOver clear');
                else $(this).addClass('inputOver filled');
            }
        });

        $('.input').mouseout(function() {
            if ($(this).hasfocus == true) return;
            else {
                var text = getAttr($(this));
                $(this).removeClass();
                if(($(this).attr("value") == "") || ($(this).attr("value") == text)) $(this).addClass('inputOut clear');
                else $(this).addClass('inputOut filled');
            }
        });

        $('.input').focus(function() {
            $(this).hasfocus = true;
            $(this).removeClass();
            $(this).addClass('inputActive');
            var text = getAttr($(this));
            if($(this).attr("value") == text) {
                $(this).attr("value", "");
            }
        });

        $('.input').blur(function() {
            $(this).hasfocus = false;
            var text = getAttr($(this));
            $(this).removeClass();
            if($(this).attr("value") == "") {
                $(this).attr("value", text);
                $(this).addClass('inputOut clear');
            }
            else if(($(this).attr("value") != "") && ($(this).attr("value") != text)) {
                $(this).addClass('inputOut filled');
            }
        });

        // TEST SPANS
        $("#spans span.off").fadeIn(0);

    });

    function getAttr(element) {
        var text = element.attr("id");
        text = text.replace(/-/g," ");
        return text;
    }

除了一件事,一切都正如我所愿。 mouseover / mouseout函数在具有焦点的元素上运行。主要是HTML / PHP,我的Javascript技能绝对是一项正在进行的工作,所以要好。我认为可以工作的是添加一个isFocused属性(你可以看到我在那里尝试过的东西),但是到目前为止我还没有尝试过它。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

我想你想要第7行:

$(this).isFocused == "false";

$(this).isFocused = "false";

答案 1 :(得分:0)

我认为以下内容可能会在这个例子中评估相同,但不应该:

if ($(this).hasfocus == "true") return;

是:

if ($(this).hasfocus == true) return;

答案 2 :(得分:0)

你可能想重构一下。

创建命名函数,或[更好]创建一个对象(如果你没有很多js,则全局可以正常)并将你的函数放在该对象中,以便它们具有名称。

MyAwesomeGlobalSomething={};
MyAwesomeGlobalSomething.mOverFunc=function(){
  //the stuff You do
       if ($(this).hasfocus == true) return;
            else {
                var text = getAttr($(this));
                $(this).removeClass();
                if($(this).attr("value") == text) $(this).addClass('inputOver clear');
                else $(this).addClass('inputOver filled');
            }
}
//and more functions here

您现在可以绑定

 $('.input').mouseover(MyAwesomeGlobalSomething.mOverFunc);

现在

$('.input').focus(function(){
  $(this).unbind('mouseover');
//and more functions here
});

解决了您的问题并

$('.input').blur(function(){
  $(this).mouseover(MyAwesomeGlobalSomething.mOverFunc);
//and more functions here
});

返回函数绑定