2011-06-02 24 views
2

我正在做一些試驗。所以這對javascript專家來說可能看起來很糟糕。但我正在努力學習。使用css,jquery/javascript數組或開關創建警報

我有一個標題div,當用戶將鼠標放在每個縮略圖上時,它會顯示一個更大的圖像。我用jQuery來創建這個效果。標題div包含一個按鈕。點擊按鈕後,會彈出一個警告,告訴用戶該藝術家的圖像名稱。該按鈕連線到段落的ID。問題是,我的代碼不工作。我不想使用「onclick」內聯javascript(這是我用來調用showArtistname()函數)。我想要像jQuery一樣不顯眼的javascript。我不知道如何做到這一點。我不知道我是否應該使用一個數組,或者如果我正確地接近這個。嗯,這是不正確的,因爲它不工作...

這裏是我的jQuery代碼:

$(function(){ 
$("a:has(img.small)").mouseover(function(){ 
var bigImage= $(this).attr("href"); 
$("#heading").attr({src: bigImage}); 
return false; 
}); 

}); 

這裏是我的javascript代碼:

function showArtistname(){ 

var a = document.getElementById ("bluesails", "purplemountains", "bigsky", "nightlights", "fireysunset", "brilliantsunrise").innerHTML; 


switch(a) { 
case "bluesails": 
    alert("Arthur MacKenzie") 
    break 
case "purplemountains": 
    alert("Maggie Laing") 
    break 

case "bigsky": 
    alert("Arthur MacKenzie") 
    break 

case "nightlights": 
    alert("Aria Soriano") 
    break 

case "fireysunset": 
    alert("Felix Buckley") 
    break 

case "brilliantsunrise": 
    alert("Felix Buckley") 

} 
} 

這裏是我的HTML:

<div class="container_12" id="_container"> 

<div class="grid_12" id="12_header" > 

    <div class="hc_left_pic"> <img src="images/01_md.jpg" id="heading" alt="Big Image." /> 
<div id="showImage" onclick="showArtistname()"></div> 
    </a></div> 
</div> 



<div class="clear"></div> 




<div class="grid_4" id="artist_container1"> 
<a href="images/01_md.jpg"><img src="images/01_sm.jpg" width="100" height="100" class="small" alt="Small image Blue Sails" /></a>  
    <p class="text" id="bluesails">Blue Sails</p> 
</div> 


<div class="grid_4" id="artist_container2"> 
<a href="images/02_md.jpg"><img src="images/02_sm.jpg" width="100" height="100" class="small" alt="Small Image Purple Mountains"/></a> 
    <p class="text" id="purplemountains">Purple Mountains</p> 
</div> 


<div class="grid_4" id="artist_container3"> 
<a href="images/03_md.jpg"><img src="images/03_sm.jpg" width="100" height="100" class="small" alt="Small Image Big Sky"/></a> 
    <p class="text" id="bigsky">Big Sky</p> 
</div> 


<div class="clear"></div> 


<div class="grid_4" id="artist_container4"> 
<a href="images/04_md.jpg"><img src="images/04_sm.jpg" width="100" height="100" class="small" alt="Small Image Night Lights" /></a> 
    <p class="text" id="nightlights">Night Lights</p> 
</div> 


<div class="grid_4" id="artist_container5"> 
<a href="images/05_md.jpg"><img src="images/05_sm.jpg" width="100" height="100" class="small" alt="Small Product Image Firey Sunset"/></a> 
    <p class="text" id="fireysunset">Firey Sunset</p> 
</div> 


<div class="grid_4" id="artist_container6"> 
<a href="images/06_md.jpg"><img src="images/06_sm.jpg" width="100" height="100" class="small" alt="Small Product Image Brilliant Sunrise"/></a> 
    <p class="text" id="brilliantsunrise">Brilliant Sunrise</p> 
</div> 

這是我的CSS:

.container_12 .grid_4 { 
    width: 274px; 
    height: 370px; 
    background-color:#ccc; 
    border: 3px solid #999; 
    padding-left:10px; 
    padding-right:10px; 
    padding-bottom:10px; 
} 


#showImage{ 
margin: -170px 20px 80px 700px; 
width: 176px; 
height: 48px; 
background:url(../images/showimage.jpg); 
position:relative; 
z-index:100; 
} 

.grid_4 img { 
position:relative; 
left:100px; 
top:20px; 
padding:0 0 60px 0; 
border:none; 

} 
.grid_4 p { 
position:relative; 
text-align:center; 
} 

p.text { 
font-family:Arial, Helvetica, sans-serif; 
font-size:.75em; 
color:#000; 
line-height:1.25em; 
font-weight:bold; 
} 


#12_header { 
display: inline; 
background-color:#e5e5e5; 
border: 3px solid #bfbfbf; 
height:225px; 
font-family:Arial, Helvetica, sans-serif; 
font-size:; 
color:#000; 
font-weight:bold; 
line-height:1.2em; 

} 


.hc_left_pic { 
float:left; 
margin-top:15px; 
background-color:#e5e5e5; 
border: 3px solid #bfbfbf; 
width:935px; 
height:250px; 
} 

我希望我已經提供了足夠的信息來解決這個問題。

感謝

+0

你爲什麼不嘗試jQueryUI的?它更容易。 http://jqueryui.com – 2011-06-02 09:09:17

+0

我不知道如何使用jQuery來做到這一點。我創建了畫廊,但我不知道如何使標題div上的按鈕在警報中顯示藝術家名稱。你會展示如何做到這一點? – mick 2011-06-02 09:30:10

+0

你能把整個代碼移植到網上嗎?我希望看到它的工作,而不是研究整個代碼。試試jsfiddle。 – 2011-06-02 09:34:13

回答

0

看來你有一點jQuery中的方式來學習,但我們都沒有在一個點上,我看到你的努力之上做的,你採取同樣的方法,我將有幾個多年前。做好了給我們一些代碼,它表明你不只是在尋找一個人做免費工作。做得好。

看到下面你想要什麼的jsfiddle。

注意:
我刪除了鏈接,因爲它們完全冗餘(或至少它們與您的返回false;)。
另外我已經註釋掉了所有的CSS。
http://jsfiddle.net/YAaFg/

玩得開心,

乾杯
查理

+0

謝謝,查理。我會檢查你的代碼。我試着添加評論,但我不得不等待五分鐘,所以我一直試圖弄清楚,我忘了回來了!是的,我想這裏是我的jsfiddle代碼http://jsfiddle.net/Mick/NvncJ/5/ – mick 2011-06-02 11:08:41

+1

請考慮在你的答案中包括你的代碼的相關部分。一個jsFiddle鏈接確實不錯,但StackOverflow的目標是儘可能獨立:) – 2011-06-02 11:16:12

+0

我使用的是一個id而不是「name」,因爲它在一段內。段落是否有「名稱」屬性?我無法找到它的搜索結果。要使用'id',我會怎麼寫? – mick 2011-06-02 11:22:46

0

的問題是在你的showArtistname功能:它總是給變量一個ID爲 「bluesails」 的元素的innerHTML。

現在有很多可能的解決方案來實現您的目標。這裏是我的:


// JQuery part of the code 
$(function(){ 
    $("a:has(img.small)").mouseover(function(){ 
     var bigImage= $(this).attr("href"); 
     $("#heading").attr({src: bigImage}); 
     $("#_container").attr({hoveredImage: $(this)}); // Extends your container div with a hoveredImage property, which returns the currently hovered image or undefined 
     return false; 
    }); 
    });
// Plain JavaScript part of the code oArtistNamesByImageId = { "bluesails": "Arthur MacKenzie", "purplemountains": "Maggie Laing", "bigsky": "Arthur MacKenzie", "nightlights": "Aria Soriano", "fireysunset": "Felix Buckley", "brilliantsunrise": "Felix Buckley" };
function showArtistname(){ var img = document.getElementById("_container").hoveredImage; if(img)alert(oArtistNamesByImageId[img.id]); }

+0

所以你寫的代碼片段都會做同樣的事情?一個使用jQuery和另一個使用JavaScript?我會測試,我只想同時詢問 – mick 2011-06-02 11:27:30

+0

男孩我有很多學習!我看到您使用JSON作爲藝術家名稱,然後創建該功能。該代碼上方的jQuery用於圖像懸停效果 – mick 2011-06-02 11:44:20

+0

不,一個片段在沒有其他片段的情況下不起作用;我的帖子應該更加精確。剛剛更新。 – Luc125 2011-06-02 12:13:49

0

它可能不是你正在完成的,但我有made a demo,它簡單地將圖像複製到上面的較大區域。

alert()走的是標題現有<img>元件,它可以讓你保持藝術家的名字作爲HTML的一部分,而不是保持HTML和JavaScript的屬性。它也更加符合語義的正確性,爲您的頁面提供更多內容,並且是更簡單的解決方案。

如果你需要顯示不同形象,而不僅僅是一個克隆,你可以作爲隱藏要素,無論上邊<div>裏面添加較大的圖像,並使用jQuery show()來取消隱藏圖像。

編輯:Updated demo將警報移動到點擊事件。這可以很容易地在頂部<img>本身click事件的或父<div>如果必要的話只是改變了選擇器$('#topImage img').click(function() {...});$('#topImage').click(function() {...});

+0

謝謝,andyb爲你的時間。這是在mouseove上顯示警報的一種很酷的方式。我試圖讓用戶點擊一個按鈕時啓動警報。 '

'圖像可以是CSS樣式,也可以添加爲圖像鏈接。我很難弄清楚這一點。我不想在div或img上進行內聯「onclick」事件。我喜歡jQuery所做的「幕後」。任何指示? – mick 2011-06-02 12:26:12

+0

該按鈕放大圖像 – mick 2011-06-02 12:33:32

+0

我更新了演示版,但是它基於您的舊評論:-)演示將click事件綁定到錨標記,因此不能內聯。如果這需要更多的工作,請告訴我。 – andyb 2011-06-02 12:34:51