0

这是我用来编码 HTML 的代码:

<button id="imageshow" style="display:none">Button1</button>&nbsp;&nbsp;&nbsp;
<button id="imageshow" style="display:none">Button2</button>&nbsp;&nbsp;&nbsp;
<button id="imageshow" style="display:none">Button3</button>&nbsp;&nbsp;&nbsp;<br>
<img src="Images/Image1.jpg" onmouseover="showIt(this.src)"><br>
<button id="imageshow" style="display:none">Button4</button>&nbsp;&nbsp;&nbsp;
<button id="imageshow" style="display:none">Button5</button>&nbsp;&nbsp;&nbsp;
<button id="imageshow" style="display:none">Button6</button>&nbsp;&nbsp;&nbsp;

当我在不使用 style="display:none" 的情况下对此进行编码时,我可以添加所有内容。但是当我像上面那样编码并使用下面的javascript时:

function showIt(imgsrc)
{
document.getElementById('imageshow').src=imgsrc;
document.getElementById('imageshow').style.display='';
}

function hideIt()
{
document.getElementById('imageshow').style.display='none';
}

只添加了一个按钮。任何人都可以解决这个问题。谢谢

4

3 回答 3

2

那是因为您只能拥有一个具有给定 id 的元素。

你应该使用类。

http://jsfiddle.net/mwu4M/

HTML

把那些丑陋的&nbsp;<br />. 并使用class="imageshow"而不是id="imageshow".

<button class="imageshow">Button1</button>
<button class="imageshow">Button2</button>
<button class="imageshow">Button3</button>
<img id="myimg" src="Images/Image1.jpg" onmouseover="showIt(this.src)" onmouseout="hideIt()" alt="[IMG]">
<button class="imageshow">Button4</button>
<button class="imageshow">Button5</button>
<button class="imageshow">Button6</button>

CSS:

.imageshow{
    visibility:hidden;
    margin-right:15px;
}
.imageshow.show{
    visibility:visible;
}
#myimg{display:block;}

JavaScript:

function getElementsByClassName(c,el){
    if(typeof el=='string'){el=document.getElementById(el);}
    if(!el){el=document;}
    if(el.getElementsByClassName){return el.getElementsByClassName(c);}
    var arr=[],
        allEls=el.getElementsByTagName('*');
    for(var i=0;i<allEls.length;i++){
        if(allEls[i].className.split(' ').indexOf(c)>-1){arr.push(allEls[i])}
    }
    return arr;
}
function addClass(el,c){
    var arr=el.className.split(' ');
    if(arr.indexOf(c)>-1){return;}
    arr.push(c);
    el.className=arr.join(' ');
}
function delClass(el,c){
    var arr=el.className.split(' ');
    if(arr.indexOf(c)===-1){return;}
    arr.splice(arr.indexOf(c),1);
    el.className=arr.join(' ');
}
function showIt(imgsrc){
    this.src=imgsrc;
    var els=getElementsByClassName('imageshow');
    for(var i=0;i<els.length;i++){
        addClass(els[i],'show');
    }
}
function hideIt(){
    var els=getElementsByClassName('imageshow');
    for(var i=0;i<els.length;i++){
        delClass(els[i],'show');
    }
}

编辑:

甚至更好:http: //jsfiddle.net/mwu4M/1/

HTML:

<div id="wrapper">
    <button class="imageshow">Button1</button>
    <button class="imageshow">Button2</button>
    <button class="imageshow">Button3</button>
    <img id="myimg" src="Images/Image1.jpg" onmouseover="showIt(this.src)" onmouseout="hideIt()" alt="[IMG]">
    <button class="imageshow">Button4</button>
    <button class="imageshow">Button5</button>
    <button class="imageshow">Button6</button>
</div>

CSS:

#wrapper>.imageshow{
    visibility:hidden;
    margin-right:15px;
}
#wrapper.show>.imageshow{
    visibility:visible;
}
#myimg{display:block;}

JavaScript:

function showIt(imgsrc){
    this.src=imgsrc;
    document.getElementById('wrapper').className="show";
}
function hideIt(){
    document.getElementById('wrapper').className="";
}

但我不明白你在做什么src

你的代码有

document.getElementById('imageshow').src=imgsrc;

但是imageshow是按钮而不是图像!

然后我以为你想改变myimg'src.

但这没有意义,因为我们将其更改srcsrc!!

<img id="myimg" src="Images/Image1.jpg" onmouseover="showIt(this.src)" onmouseout="hideIt()" alt="[IMG]">
function showIt(imgsrc){
    this.src=imgsrc;/*It was "Images/Image1.jpg" and now it's "Images/Image1.jpg" too*/
    document.getElementById('wrapper').className="show";
}

编辑2:

如果您想在悬停图像时显示按钮并在鼠标移动到另一个位置时隐藏它们,您可以onmouseleave在父级上使用。但是并非所有浏览器都支持它,因此您需要实现它:

function containsOrIs(el1,el2){
    if(el1===el2){return true;}
    return Boolean(el1.compareDocumentPosition(el2)&16);
}
function addEvent(el,e,f,b){
    if(typeof el==='string'){el=document.getElementById(el);}
    if(e=='mouseenter'||e=='mouseleave'){
        return addEvent(el,e=='mouseenter'?'mouseover':'mouseout',function(e){
            if(!e){e=window.event;}
            if((el===e.target || containsOrIs(el, e.target)) && !containsOrIs(el, e.relatedTarget||e[e=='mouseenter'?'fromElement' : 'toElement'])){
                f();
            }
        });
    }
    if(el.addEventListener){
        if(b==undefined){b=false}
        return el.addEventListener(e,f,b);
    }
    if(el.attachEvent){
        return el.attachEvent('on'+e,f);
    }
}
function showIt(imgsrc){
    this.src=imgsrc;
    document.getElementById('wrapper').className="show";
}
function hideIt(){
    document.getElementById('wrapper').className="";
}
window.onload=function(){
    addEvent('wrapper','mouseleave',hideIt);
}

演示:http://jsfiddle.net/mwu4M/2/

编辑 3

但也许您更喜欢使用:hover,它更简单且仅 CSS:

#wrapper>.imageshow{
    visibility:hidden;
}
#wrapper:hover>.imageshow{
    visibility:visible;
}

但是当鼠标悬停时,按钮将显示#wrapper,而不仅仅是图像。

演示:http://jsfiddle.net/mwu4M/3/

于 2012-09-03T15:19:39.287 回答
2

您有多个具有相同 id 的元素,因此 Javascript 只采用第一个。改用class="imageshow"就可以了。

脚本如下所示:

function showIt(imgsrc)
{
    var images = document.getElementsByClassName('imageshow');

    for(var i=0; i<images.length; i++)
    {
        images[i].src=imgsrc;
        images[i].style.display='';
    }
}

function hideIt()
{
    var images = document.getElementsByClassName('imageshow');

    for(var i=0; i<images.length; i++)
    {
        images[i].style.display='none';
    }
}
于 2012-09-03T15:20:10.763 回答
1

document.getElementById()只会返回一个元素(因为规范说 ID 应该是唯一的),因此不会适用于您的所有按钮。

您的替代方法是用名称和使用document.getElementsByName()或类替换您的 ID,但是以跨浏览器的方式按类选择元素并不太简单,除非您可以在页面上包含诸如 jQuery 之类的库。

于 2012-09-03T15:22:37.633 回答