2017-03-09 53 views
0

第一篇文章,所以請溫柔;-)

我一直在學習編碼在過去的幾個星期通過製作一個虛擬頁面,並且隨着我的進展逐漸實現了我學習的內容,因此它是一個混合包,其功能/代碼根據我寫它的時間,基於純HTML/CSS,內聯JavaScript,外部JavaScript,最後jQuery。

所以我大多裹了起來,現在我清理爛攤子,我的任務之一是剔除功能和行代碼,並在其中的一個我有點卡住。

的前爲30層的按鈕調用到30種不同的功能的onclick像這樣:

function cell3() { 

     document.getElementById('base3').src='images/1/3/' + x + '.png'; 
     document.getElementById('base3b').src='images/1/3/' + x + '.png'; 
     document.getElementById('v2base3').src='images/2/3/' + x + '.png'; 
     document.getElementById('v2base3b').src='images/2/3/' + x + '.png'; 
     document.getElementById('cell3').style.backgroundColor= x ; 
} 

當一個全局變量(x)定義爲圖像點擊該按鈕時,一些div內,以取代圖像的文件夾的路徑(小區3)。它也改變了它的顏色。與此位的jQuery很抱歉,如果命名比較混亂......

所以我刪除所有30個功能和30的onclick電話:

$('button').click(function(){ 

    var eyeD = $(this).attr("id"); 
    var newURLa = 'images/1/' + eyeD + '/' + x + '.png'; 
    var newURLb = 'images/2/' + eyeD + '/' + x + '.png'; 

    $('base' + eyeD).attr('src', newURLa); 
    $('base' + eyeD + 'b').attr('src', newURLa); 
    $('v2base' + eyeD).attr('src', newURLb); 
    $('v2base' + eyeD + 'b').attr('src', newURLb); 
    $(this).css("background-color", x); 
    document.getElementsByid('check').innerhtml = eyeD; 

}); 

要做到這「工作」我改變了從「小區1」,「小區2等爲‘1’,‘2按鈕的名字’等

現在的事情是,上的按鈕,當點擊了var‘獨眼’需要從按鈕確定的值。 ('1','2'等)。元素ID被正確地形成('base1','base2'...'base1b',base2b'...),並且URL的形成正確。 (代碼中的最後一行是一個顯示值的p元素,所以我可以嘗試對其進行疑難解答)背景顏色也按預期更改。但圖像不會被替換。

嘗試添加逗號所產生的URL的情況下,它是一個語法問題,但沒有任何反應。我甚至去過freestyle,並且用它的= url(),不同地方的不同逗號等等來嘗試它。還寫了一個沒有變量的網址,看看這是否可行,但仍然沒有。在查看控制檯時也沒有發生錯誤。

這可能是一個基本的「衛生署!」的事情,但現在我有心理障礙......

此外,有沒有一種方法來保持原有的命名,只是獲取的ID的編號部分?考慮使用[4]標識符來獲得第5位數字,但運行雙數字時不起作用。 (10,11等)

謝謝!

+2

'$工作( 「ID」)'是不正確。它應該是'$(「#ID」)' – Archer

+1

非常接近....'$('base'+ eyeD).'應該是'$('#base'+ eyeD).'以及所有其他ID 。 – epascarello

+0

只是給了一個嘗試。仍然不起作用。我沒有使用#一段時間,並沒有問題,所以要麼它不再需要了,或者我將不得不花費幾個小時將#添加到所有調用id的...的元素的函數: - )謝謝BTW –

回答

0

您正在錯誤地抓取元素。

要麼抓住被它的類名像這樣的元素:

$('.v2base' + eyeD + 'b').attr('src', newURLb); 

或者以自己的ID:

$('#v2base' + eyeD + 'b').attr('src', newURLb); 
1

你的jQuery行訪問的元素缺少#跡象。

更改這些...

$('base' + eyeD).attr('src', newURLa); 

對此...

$('#base' + eyeD).attr('src', newURLa); 

此外,您使用普通JS的最後一行可以在jQuery中完成,並且代碼少。

document.getElementsByid('check').innerhtml = eyeD; 

要...

$("#check").html(eyeD); 

然而,你應該總是使用不同元素的ID。如果您需要同時使用多個元素,請改爲使用類。

$(".check").html(eyeD); 
+0

是啊,最後一行是一個快速複製和粘貼形成是在頁面上已經是另一個元素,所以他們分享純JS和類,因此我將它命名爲'check' –

0

問題解決!!它確實使用散列來調用id,但也必須用雙引號來調用它。單引號逗號將無法使用。

所以工作格式

$("#v2base" + eyeD + "b") 

,但它不會像這樣

$('#v2base' + eyeD + 'b') 

謝謝大家,它一直情緒