2011-08-12 59 views
0

我使用JavaScript來生成一個圖像對象,然後使用jQuery來改變它的屬性,包括一個.load函數。在找到Safari(ver 5.0.5)的錯誤控制檯(當最後不難發現時最令人沮喪)之後,我們發現Safari在遇到未封閉的img標籤時終止了它的JavaScript,當然在HTML5中不推薦使用。我只是簡單地將函數中的img標籤硬連接起來,如果這樣做不會增加加載函數而非噩夢(如果不是不可能的話)。有任何想法嗎?Safari瀏覽器不酷,HTML5無效元素; JavaScript是

function loadImageTitle(imgsrc, element, width, height, title) { 
    var img = new Image(); 
    $(img) 
     .load(function() { 
      $(this).hide(); 
      $(element).replaceWith(this); 
     }) 

     .css({ 'max-width': width, 'max-height': height }) 
     .attr("title", title) 
     .attr("alt", title) 
     .attr("src", imgsrc); 
} 

我其實有種不清楚這個最基礎的部分。問題是,JavaScript使img沒有尾隨斜線(在Safari 5.0.5中,在FF 4.0.1中,在IE8中和在Chrome 13中 - 無處不在,因爲我可以告訴),因爲在HTML5中,它是可選的。 Safari不同意並終止腳本。

+3

你爲什麼要將圖像對象傳遞給jQuery。難道這不是'$('')'而不是'$(img)'? – tjameson

+0

什麼版本的Safari?你可以在http://jsfiddle.net上重現這個嗎? – thirtydot

+1

只是爲了澄清,你正試圖將一個jQuery加載事件處理程序附加到JavaScript Image對象。還沒有添加到DOM的一個。我對麼? – rossipedia

回答

0

目前還不清楚你的代碼試圖實現什麼。它看起來像你試圖用圖像替換現有的元素。你可以做這樣的事情:

var img = $("<img/>") 
    .load(function() { $(element).replaceWith(this); }) 
    .attr({ 
    title: title, 
    alt: title, 
    src: imgsrc 
    }) 
    .css({ 
    "max-width": width, 
    "max-height": height 
    }) 

我打算用.hide()隱藏圖像,但它應該是罰款的。由於圖像尚未添加到文檔中,因此無論如何都不可見。

+0

謝謝!我會給這個鏡頭。我也忘記了將代碼放在一起時,但replaceWith最初是.replaceWith($(this).fadeIn()),因此.hide()。但似乎這種替代選擇器語法正是我所期待的。 –

相關問題