2012-12-10 69 views
0

我有三個div和Id喜歡爲它們添加點擊功能。 理想情況下,我希望他們都使用相同的功能,並使用ther ID作爲參數如何在div中傳遞一個div ID作爲參數?

當我運行這個時,無論我點擊哪個框,我都會收到'leftBox'的提醒。

有人可以解釋我做錯了什麼?

$('<div id="imageBoxOne">< src="images/carOne.jpg"></div>'); 
$('<div id="imageBoxTwo">< src="images/carTwo.jpg"></div>'); 
$('<div id="imageBoxThree">< src="images/carThree.jpg"></div>'); 

$("#imageBoxOne").click(moveImages); 
$("#imageBoxTwo").click(moveImages); 
$("#imageBoxThree").click(moveImages); 

function moveImages(imageId) { 
    if (imageId = imageBoxOne){ 
     alert('leftBox'); 
    } 

    else if (imageId = imageBoxTwo){ 
     alert('middleBox'); 
    } 
    else { 
      alert('rightBox'); 
    } 
}; 
+1

使用'=='vs'='一個是比較,另一個是賦值 – Jakub

+0

img是怎麼回事? – mplungjan

回答

2
imageId = imageBoxOne 

分配imageId到不存在imageBoxOne可變

你想比較它們使用===,並要使用"..."一個字符串字面

另外,imageId實際上是事件對象。您可以從this中獲得添加處理程序的元素,並獲取其id屬性(this.id

+0

imageId是這種情況下的事件對象,所以即使使用正確的==或===,它也不會相等,對​​吧? –

0

您正在使用「=」而不是「==」或通常更好的「===」。

+0

無關緊要,事件對象永遠不會等於任何未定義的變量。 –

+0

你說得對,儘管他的作業使用不正確。無論如何,大量的答案已經指出了這一點。 – Marcus

4

在你的函數中,imageId指的是事件對象,而不是元素的ID,你應該使用this關鍵字。另請注意,您正在設置該值,而不是將其進行比較。

function moveImages(imageId) { 
    if (this.id === 'imageBoxOne') { 
     alert('leftBox'); 
    } 
    // ... 
+0

完美!乾杯!! – Daft

1

點擊事件傳遞的參數是事件,其中包含大量信息。你可以得到的ID是這樣的:

function moveImages(e) { 
    var id = e.target.id; 
} 

獲取父div的ID:

function moveImages(e) { 
    var id = $(e.target).parent().attr('id'); 
} 
+2

'e.target'最有可能不會是'div',而是裏面的'img'。 –

+0

@JanDvorak:啊沒有注意到他的HTML。我會編輯它 – xbonez

+0

雖然'e.target'最有可能是圖像,你不能指望它。你可以嘗試「最接近」,但即便如此,它也是不必要的複雜。 –

0

你可以得到它使用this.id裏面的功能。

當您執行以下操作時。您應將imageBoxOne的值指定爲imageId,則應使用==

imageId = imageBoxOne 
+0

這會立即觸發moveImages方法,而不是點擊。 –

+0

@KevinB對,固定。 –

相關問題