3

这是我的代码:

function addAlbum(){
    var attr;
    var parent;
    var newelement;

    /*image*/
    newelement = document.createElement("img");
    newelement.src = "criar_album.png";

    attr = document.createAttribute("id");
    attr.value = "addalbum";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("usemap");
    attr.value = "#addalbum_map";
    newelement.setAttributeNode(attr);

    parent = document.getElementById("content");
    parent.appendChild(newelement);
    /*-----------------------------------------*/

    /*map*/
    newelement = document.createElement("map");

    attr = document.createAttribute("id");
    attr.value = "album_map";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("style"); /*this part is failing I guess*/
    attr.value = "cursor:pointer";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("name");
    attr.value = "addalbum_map";
    newelement.setAttributeNode(attr);

    parent = document.getElementById("addalbum");
    parent.appendChild(newelement);
    /*-----------------------------------------*/

    /*area*/
    newelement = document.createElement("area");

    attr = document.createAttribute("shape");
    attr.value = "rect";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("coords");
    attr.value = "73, 238, 115, 264";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("onclick");
    attr.value = "createAlbum()";
    newelement.setAttributeNode(attr);

    attr = document.createAttribute("onmouseover");
    attr.value = "highlightOn(470,320,511,346,2)";
    newelement.setAttributeNode(attr);

    parent = document.getElementById("album_map");
    parent.appendChild(newelement);
    /*-----------------------------------------*/
}

一切似乎都很好,除了当我将光标传递到区域元素时部分光标会发生变化。我用 html 中定义的静态图像做了类似的事情并且它可以工作,所以现在我很困惑为什么它不适用于动态创建的地图?

PS:已经在 CSS 中为“addalbum”id 定义了样式,但它没有帮助。顺便说一句,我知道,有一些方法可以通过定义 href 等棘手的方式来实现,但我想知道这里真正的问题是什么。

4

1 回答 1

1

如果您使用的是 chrome 或 Safari,请参阅此答案。在 Usemap/area 情况下,光标未更改为指针

我会补充一点,你的代码太复杂了。您不必添加style,idshape作为属性(attr.value = "cursor:pointer";可能根本不会起作用)。下面的代码工作正常,产生一个很好的 1,1,100,100 映射,光标作为指针。但同样仅适用于 Opera 和 Firefox 等浏览器,但不适用于 Chrome 或 Safari (WebKit)。

var body=document.getElementsByTagName('body')[0];

var img = document.createElement("IMG");
img.src='1.gif';
img.useMap='#album_map';

var map = document.createElement("MAP");
map.id="album_map";
map.style.cursor="pointer"; //the right way

var area  = document.createElement("AREA");
area.shape='rect';
area.coords="1, 1, 100, 100";

map.appendChild(area);
body.appendChild(map);
body.appendChild(img);

添加标准事件:

绑定预定义函数:

function imgClick() {
    alert('click');
}

body=document.getElementsByTagName('body')[0];
var img = document.createElement("IMG");
img.src='image.gif';
img.onclick=imgClick;
body.appendChild(img);

或通过所谓的匿名函数:

img.onclick=function() {
    alert('click');
}
于 2012-11-08T14:07:01.650 回答