2012-02-23 105 views
1

我有一個jQuery的問題,我不能讓過去:jQuery的不具約束力正確

(function ($) { 
var links = new Array(); 
var vidFrame = document.getElementById('videoFrame'); 
links = $('.video'); 

$(links).each(function() { 
    $(this).bind('mouseenter', function() { 
     $(vidFrame).attr('src',$(this).attr('href'));   
     window.frames[0].location.reload(); 
}); 
}); 

}(jQuery)); 

vidFrame是一個iframe,鏈接是鏈接的集合,(現在)鏈接返回到一些內容。我正在嘗試獲取分配給每個鏈接的點擊事件,以便通過該鏈接進行鼠標懸停,將其源視頻廣播到iframe中。我想在href中保留原始鏈接信息,這樣如果javascript被禁用,鏈接會將您帶到內容中。

windw.frames聲明應該重新載入iframe,但我還沒有足夠的測試它。

該腳本得到正確的href,它只是沒有正確地綁定它。我認爲$(this)語句的範圍是正確的,我登錄到控制檯並獲取我想要的鏈接,但出於某種原因事件不能綁定?

這是我以前遇到過的麻煩,特別是在each()循環內混合使用javascript和jquery。我真的會有任何見解。謝謝

+0

我不明白你爲什麼首先將「鏈接」定義爲一個新的數組,然後將其分配給具有視頻類的元素?此外,從版本7.1開始,綁定已被棄用。使用$(this).on('mouseenter',,,或$(this).mouseenter(函數(... – 2012-02-23 01:16:13

回答

1

在代碼中有幾點需要注意。你聲明links爲一個數組,你用一組jQuery對象覆蓋它,當你調用each()循環時,你將它包裝在一個jQuery對象中......沒有多大意義。

要調用一個事件,你不需要一個each()循環,你可以在jQuery集合上調用它。您在循環中使用的兩個$(this)都是誤導性的,您應該先緩存它,例如var that = $(this)。此外,bind()不再使用。您可以使用on()click()快捷方式。
當您通過新的src時,iframe應該刷新。看看Ajax Reload iframe

var $links = $('.video'), 
    $frame = $('#videoFrame'); 

$links.mouseenter(function(){ 
    $frame.attr('src', $(this).attr('href')); 
}); 
+0

)這是特殊的幫助,謝謝。我收集,如果綁定已被棄用,這將解釋爲什麼我'數組聲明是一個快速修復,在我明確聲明之前,每個都只從第一個鏈接中分配href(我不明白這一點),感謝幫助,我會給它一槍。 – user173361 2012-02-23 01:26:59