2013-08-25 56 views
0

我猜我有点不同寻常。我有此功能deleteItem其的onclick触发,并具有以下参数通过字符串将html对象传递到函数中

function dItem(type,id,element,confirmed){ 
    if(confirmed){ 
     handle delete function 
    }else{ 
     var c = ','; 
     popup('Are you sure you want to delete this item?', 
      { 
       "Yes":"dItem('"+type+"'"+c+id+c+element+c+true+")", 
       "Cancel":"popupClose()" 
      } 
     ) 
    } 
} 

.. onclick='dItem("comment",15,this,false)' ..

popup()的第二个参数被传递要被显示在弹出的按钮和功能它们分别调用。问题是,element是一个HTMLDIV element,我不能找出一个简洁的方式来通过一个字符串。我能想到的唯一解决方案是拥有一个全局变量来保存有问题的元素,而不是传递它,尽管我不想那么做,因为它更像是一种黑客而不是解决方案。有人知道我如何通过字符串传递该元素吗?提前致谢!

EDIT

这是b正在处理,变成HTML按钮如何对象。你看到我可以提供一个实际的功能,而不是以字符串形式的名称?

var _b = ''; 
for(var i in b){ 
    _b+="<div onclick='"+b[i]+"'>"+i+"</div>"; 
} 
+0

也许不是通过DOM元素,而是通过元素的ID和使用的document.getElementById –

+0

当你虽然运行代码当前会发生什么?我没有看到你的代码不能正常工作的原因:/与传递整个元素相反,你为什么不传递它的ID? – ninty9notout

+0

因为元素没有ID。不幸的是,我想不得不破解它是唯一的方法 –

回答

2

通过回调来处理这种情况更为常见。你需要改变你的弹出功能才能工作。

实施例:

popup('Are you sure you want to delete this item?', { 
    "Yes": function() { 
     dItem(type, id, element, confirmed); 
    }, 

    "Cancel": function() { 
     popupClose(); 
    } 
}); 

作为一种变通方法,你可以简单地生成用于元素的唯一的ID,并使用该稍后识别元件。因为你的函数是递归的,所以你需要处理的事实是element可以是ELEMENT_NODEstring

for(var i in b){ 
    var generatedId = i /* TODO: not sure this generates an unique id */; 
    _b += "<div id='" + generatedId + "' onclick='" + b[i] + "'>" + i + "</div>"; 
} 

function dItem (type, id, element, confirmed) { 
    if (confirmed) { 
     // handle delete function 
    }else{ 
     var elementId; 

     // find the elementId 
     if (element && element.nodeType && element.nodeType == 1) { 
      elementId = element.id; 
     }else if (typeof element == 'string') { 
      elementId = element 
     }else{ 
      throw Error('Argument [element] is not a ELEMENT_NODE or string'); 
     } 

     var args = [type, id, elementId, true]; 

     popup('Are you sure you want to delete this item?', { 
      "Yes": "dItem(" + args.join(', ') + ")", 
      "Cancel": "popupClose()" 
     }); 
    } 
} 
+0

这是一个很好的建议,但我不能真正做到这一点,因为按钮对象中的html是这样创建的,我只能通过字符串传递函数。在整个项目中重建整个功能并纠正其数百个用途是我真正想避免的。太糟糕了,我没有想到这一点,当我创造了这个功能。 + rep –

+0

除了回调之外,我能想到的唯一方法是传递元素id属性而不是实际元素。 – Bart

+0

我编辑过这个问题,你可以检查一下吗? –

相关问题