2010-02-04 42 views
8

Trong trang này có một cách để dynamic add html (textbox,input button and radio elements with javascriptThêm sự kiện vào nút với javascript

questioon của tôi là làm thế nào tôi có thể thêm một sự kiện vào nút, hãy tưởng tượng rằng tôi chỉ muốn tạo một nút, không phải là textbox hoặc radio thành phần.

CẬP NHẬT
tôi đang gặp vấn đề ở đây ... Tôi đã thử một số các giải pháp được cung cấp nhưng nó gây ra cho tôi vấn đề, hãy để tôi cố gắng giải thích ...

im cố gắng để mở file xml , đọc nó và tạo đối tượng html với các thuộc tính của xml, cho đến nay rất tốt, nhưng nếu tôi cố gắng thêm sự kiện, xmlObj cames null bất kỳ ideias ??

tôi có điều này ...

script = "function OnClientDragEnd(dock, args)" + 
         " {" + 
           "var hidd = document.getElementById('" + HiddenField1.Value + "');" + 
           "hidd.value = dock.get_id();" + 
        //"alert(hidd.value);" + 
           "var xmlDoc = new ActiveXObject('Microsoft.XMLDOM');" + 
           "xmlDoc.async = 'false';" + 
           "xmlDoc.load('Config.xml');" + 
           "xmlObj = xmlDoc.documentElement;" + 
           "if (xmlObj.childNodes.length>0)" + 
           "{" + 
           " for (var i = 0; i < xmlObj.childNodes.length; i++)" + 
           " {" + 
           "  if (xmlObj.childNodes(i).getElementsByTagName('Id')[0].text == hidd.value){" + 
           "   var txtTb2 = document.getElementById('" + TextBox4.ClientID + "');" + 
           "   txtTb2.value = xmlObj.childNodes(i).getElementsByTagName('Titulo')[0].text;" + 
           "   y = xmlObj.childNodes(i).getElementsByTagName('Titulo')[0].nextSibling;" + 
           "   yy = xmlObj.childNodes(i).getElementsByTagName('Titulo')[0].previousSibling;" + 
        //"   alert(y.nodeName);" + 
           "   for(i=0;i<yy.text;i++){" + 
           "    alert('aa');" + 
           "    var tbox = document.createElement('input');" + 
           "    tbox.setAttribute('type', 'text');" + 
           "    tbox.setAttribute('value', y.text);" + 
           "    tbox.setAttribute('name', 'name');" + 
           "    var abcd = document.getElementById('spanObjDock');" + 
           "    abcd.appendChild(tbox);" + 
           "    var bt1 = document.createElement('input');" + 
           "    bt1.setAttribute('name', 'mais');" + 
           "    bt1.setAttribute('value', '+');" + 
           "    bt1.setAttribute('type', 'button');" + 
           "    bt1.onclick = function(){alert('Clicked!');};" + //--> this dont work 
           //"    bt1.setAttribute('Click','addRadioButton()');" + //--> and this dont work 
           "    abcd.appendChild(bt1);" + 
           "    var bt2 = document.createElement('input');" + 
           "    bt2.setAttribute('name', 'menos');" + 
           "    bt2.setAttribute('value', '-');" + 
           "    bt2.setAttribute('type', 'button');" + 
           "    abcd.appendChild(bt2);" + 
           "    var break1 = document.createElement('br');" + 
           "    abcd.appendChild(break1);" + 
           "    node = y;" + 
           "    y=y.nextSibling;" + 
           "   }" + 
           "   break; " +//<input type="button" onclick="" name"as" /> 
           "  }" + 
           " }" + 
           "}" + 
          "}";//+ 

Trả lời

14

đơn giản, sử dụng addEventListener phương pháp:

buttonRef.addEventListener("click", function() { 
    alert("Blah blah..."); 
}, false); 

(Bạn sẽ phải sử dụng giải pháp đa trình duyệt của Google. IE không hỗ trợ addEventListener)

Trường hợp buttonRef là tham chiếu đến nút. Làm thế nào bạn có thể nhận được tham chiếu đó? Có rất nhiều cách để làm điều đó. Bạn có thể sử dụng document.getElementById() hoặc bất kỳ phương pháp nào khác từ "gia đình" này.

+0

Nó hoạt động! Tôi có một số khó khăn, bất cứ điều gì mà tôi cuối cùng đã thêm, tôi nhận được lỗi rằng xmlObj là null, nhưng tôi khởi động lại VS2008 đóng một số cửa sổ và nó bắt đầu làm việc. cảm ơn!! – SlimBoy

+0

Tìm thấy liên kết này đã giúp https://developer.mozilla.org/En/DOM:element.addEventListener – SlimBoy

+0

IE 9 thực sự hỗ trợ 'addEventListener' [ref] (http://stackoverflow.com/questions/6927637/addeventlistener -in-internet-explorer # 6927800). – another

5
var element = document.createElement("input"); 
element.onclick = function() {alert('Clicked!');}; 
+0

xui xẻo! darn, đánh bại tôi một giây ... không nên đưa thêm ví dụ đó vào! –

+0

Thực ra có vẻ như dấu thời gian chính xác là giống nhau cho cả bài đăng của chúng tôi. : D –

3

Có lẽ cách qua trình duyệt đơn giản nhất là để thiết lập tên sự kiện như một thuộc tính của nguyên tố này:

Element.onclick = function() 
{ 
    // do something... 
} 
Element.onmouseup = function() 
{ 
    // do something else... 
} 
2

Bạn phải đính kèm sự kiện mới khi tạo phần tử DOM.

Ví dụ:

var e = document.createElement('input'); 
e.onclick = function() 
      { 
       alert('Test'); 
      }; 
Các vấn đề liên quan