2013-08-25 55 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

我編輯過這個問題,你可以檢查一下嗎? –

相關問題