如何动态传递元素id并调用javascript函数?

时间:2011-10-14 12:47:17

标签: javascript function dynamic arguments

我有以下的javascript代码 -

function initPage(){

    // Left Navigation Pane - moverOver effect:
    document.getElementById("imgHowToBuy").onmouseover = leftNavHoverIn;
    document.getElementById("imgNewAddition").onmouseover = leftNavHoverIn; 
    document.getElementById("imgMostPopular").onmouseover = leftNavHoverIn;
    document.getElementById("imgOffer").onmouseover = leftNavHoverIn;   
    document.getElementById("imgRecentlySold").onmouseover = leftNavHoverIn;
.....
}

基本上我的代码工作(函数被调用并执行得很漂亮)。但我不认为我在这里使用最佳实践原则。继续调用相同的功能看起来有点奇怪;我可以以某种方式传递元素的id作为参数,然后执行函数,以便整个事情减少到一行代码?

我是一个自学成才的家伙:D

谢谢!

4 个答案:

答案 0 :(得分:1)

你可以这样做:

function assignMouseOver(elem) {
  document.getElementById(elem).onmouseover = leftNavHoverIn;
}

assignMouseOver("imgHowToBuy"); // etc

您还可以将元素ID作为数组传入并循环遍历函数内的数组,这会将其减少为一行(可见)代码:

function assignMouseOver(elems) {
  if (elems.length>0) {
   for (var i=0; i<elems.length; i++) {
     document.getElementById(elems[i]).onmouseouver = leftNavHoverIn;
   }
  }
}

assignMouseOver(["imgHowtoBuy","etc","etc"]);

最佳实践需要更多检查/验证,但上述内容应该有所帮助。

答案 1 :(得分:1)

试试这个:

var ids = ["imgHowToBuy", "imgNewAddition", "imgMostPopular", "imgOffer", "imgRecentlySold"]

var setMouseover = function (id) {
    document.getElementById(id).onmouseover = leftNavHoverIn;
};

for(var i=0;i<ids.length;i++) {
    setMouseover(ids[i]);
}

答案 2 :(得分:1)

你不是“调用相同的函数”,你只需要为页面上的许多元素分配单个函数。我觉得这里没有什么特别的错误。

您可以存储要为此函数分配的所有元素的ID,这会减少代码行数,但没有特定的理由这样做。

var leftNavElements = ["imgHowToBuy","imgNewAddition"]; // etc....
for(var i=0;i<leftNavElements.length;i++){
    document.getElementById(leftNavElements[i]).onmouseover = leftNavHoverIn;
}

答案 3 :(得分:0)

function doTheJob(id)
{
    document.getElementById(id).onmouseover = leftNavHoverIn
}

doTheJob("imgHowToBuy");
doTheJob("imgNewAddition");
doTheJob("imgMostPopular");
doTheJob("imgOffer");
doTheJob("imgRecentlySold");