首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果.parent()为.hasclass,则不应用该函数

如果.parent()为.hasclass,则不应用该函数
EN

Stack Overflow用户
提问于 2012-01-25 19:43:41
回答 5查看 29.7K关注 0票数 4

我有这个函数,只有当parent没有cooling类时才应该调用它。

代码语言:javascript
复制
function inputWidth() {
        $('input[disabled="disabled"]').removeAttr("disabled").prop("readonly", true);
        $('input[type!="submit"]').focus(function(){
            if ($(this).val().length > 20) {
                $(this).attr('data-default', $(this).width());
                $(this).animate({
                    width: 350
                }, 'slow');
                $(this).parent().addClass('cooling');
            }
        }).blur(function(){ /* lookup the original width */
            var w = $(this).attr('data-default');
            $(this).animate({
                width: w
            }, 'fast');
            $(this).parent().removeClass('cooling');
        });
   };
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-26 14:34:34

我认为这是被过度分析了。没有理由向父类添加额外的类(除非您这样做是为了样式化,在这种情况下,您可以自由地将其添加回来)。

基本上,我们只设置一次默认数据值,如果它在那里,我们就不会再次设置它(我们只是重用它)。

您还会注意到使用$.data()而不是.attr()。尽量避免使用.attr()。对于这类事情,效率并不是很高,因为您基本上是要求它在实际的DOM中查找或存储值(操作DOM的开销非常大)。在大多数情况下,这并不是正确的用法。在你的代码中,$(this).data("default")是获得你想要的东西的正确方式。举个例子:

代码语言:javascript
复制
<input type="text" id="username" data-item="random data" />

使用jQuery获取您将调用的数据项:

代码语言:javascript
复制
$("#username").data("item");

然后把"random data"找回来。

最后一件事,当使用动画(特别是“慢”动画)时,你应该养成先调用stop的习惯,这样任何正在进行的动画都会在开始下一个动画之前立即停止。

代码语言:javascript
复制
$('input[disabled="disabled"]').removeAttr("disabled").prop("readonly", true);
$('input').focus(function() {
    if ($(this).val().length > 20) {
        $(this).data('default', $(this).data('default') || $(this).width());
        $(this).stop().animate({
            width: 300
        }, 'slow');
    }
}).blur(function() { /* lookup the original width */
    $(this).stop().animate({
        width: $(this).data('default')
    }, 'fast');
});

这也是给你的jsfiddle

我希望我对你有所帮助,请记住,这里的其他几个人已经正确回答了你最初的问题。如果父类有特定的类,它们都提供了不执行某些东西的正确代码。以后,在提出问题时,请注意准确地表达出您所遇到的问题。你问的问题大概是“我如何根据焦点切换大小”,而不是“如果父对象有类,那么就不要应用...”。其他答案确实回答了你的问题。问题是你没有问对问题。

票数 4
EN

Stack Overflow用户

发布于 2012-01-25 19:49:49

代码语言:javascript
复制
if (!$(this).parent().hasClass('cooling'))
{
    //your function
}
票数 10
EN

Stack Overflow用户

发布于 2012-01-25 19:50:10

试试这个:

代码语言:javascript
复制
if( !$(this).parent().hasClass('cooling') ){
    inputWidth();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9002148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档