2016-01-23 48 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