2016-01-23 47 views
1

我在我的html.twig模板中找到了此行。In-tag'onload'JS对目标没有影响

<div class="panel panel-default" onload="(this.class = determineClass(this))">

及更高版本:

var determineClass = function(element) { 
    if (element.offsetHeight < element.scrollHeight) { 
     return element.class + ' some_class'; 
    } else { 
     return element.class + ' some_other_class'; 
    } 
} 

我预计在onload的字符串,如JS执行。但是,该字符串按字面解释,并且对该标签的class没有影响。

我怎样才能用determineClass函数来改变这个标签的class属性?

+0

只是好奇 - 我看到你想添加'some_class'或'some_other_class'基于溢出;他们会做什么样的事情? – 2016-01-23 13:04:29

回答

2

据我所知,你不能在div上使用onload。使用JQuery,这是一条路(参见fiddle)。

HTML

<div class="panel panel-default determineClass"></div> 

JS

$(document).ready(function() { 
    $('.determineClass').each(function() { 
    $(this).removeClass('determineClass'); 
    if ($(this).offsetHeight < $(this).scrollHeight) { 
     $(this).addClass('some_class'); 
    } else { 
     $(this).addClass('some_other_class'); 
    } 
    }); 
}); 

ready确保函数的文档,如果完全加载后运行。我使用类determineClass作为标志来标记需要处理的元素。

加载文档后,我遍历所有标记的元素,移除标志类并进行实际处理。

+0

你能解释一下这个技巧背后的逻辑吗? – Zim84

+0

@ Zim84我使用“标签”类来知道哪个div需要处理。我等待文档加载完毕,然后使用“标签”类获取所有div,将其删除,然后完成实际的工作。什么困扰你/你不明白吗? – Derlin

+1

我完全理解它,但其他人可能没有,因为你只是粘贴了一些代码块,没有进一步解释发生了什么,为什么。让我们从技术上正确的答案改变你的答案! – Zim84