2015-09-22 33 views
0

正如你可以在下面的代碼中看到的,我將不得不在鏈中搜索和定義var img ...並且我將不得不繼續搜索併爲其他鏈接函數定義它。我認爲必須有更好的方式來做到這一點。那麼,將元素傳遞給操作鏈的正確方法是什麼?如何在jQuery中的鏈接函數之間傳遞元素?

$('#myModal').on('show.bs.modal', function(e) { 
    var img = $(this).find('img'); 

    $(img).show(); 
}).on('hide.bs.modal', function (e) { 
    $(img).hide(); 
    //Uncaught ReferenceError: img is not defined 
}); 
+0

我們展示了一個小提琴 – taesu

+0

可以提取'VAR img'到一個更高的範圍我 – devqon

+0

懷疑你是誤會什麼方法「鏈'是。代碼中沒有'鏈';有一些單獨的事件處理程序,它們不會共享除''show.bs.modal'之外的任何共享內容。 –

回答

1

Demo

您可以如下使用全局變量。

var img; 
$('#myModal').on('show.bs.modal', function(e) { 
    img = $(this).find('img'); 

    $(img).show(); 
}).on('hide.bs.modal', function (e) { 
    $(img).hide(); 
    //Uncaught ReferenceError: img is not defined 
}); 

另外,我還準備了樣品演示,可以看到here

0

建議

由於正在使用的ID來定位圖像元素,最好的解決方案是定義以防止多個變量聲明的鏈的範圍之外的元件(因爲有可在給定時間只在一個頁面上有一個ID)。

要理解的另一件事是鏈接方法只是調用對象的多個函數的語法糖。就他們的範圍而言,你可能會在不同的線路上打電話給他們,因爲他們之間沒有共享任何信息。

var $modalImg = $('#myModal img'); 

$('#myModal').on('show.bs.modal', function(e) { 
    $modalImg.show(); 
}).on('hide.bs.modal', function (e) { 
    $modalImg.hide(); 
}); 

讓我知道如果你需要進一步澄清。

+0

我想這是有道理的。我高估了鏈接實際上做了什麼,因此在這種情況下,在這兩個函數之間共享該變量的唯一方法是聲明它更高。 – Amir

+0

你是對的。 – BenCodeZen