2011-08-05 41 views
12

Tôi thêm một nút tự động trong html như dưới đây: On click nút mà tôi muốn gọi một hàm javascript:.thêm sự kiện onclick vào nút được thêm động?

var but = document.createElement("button"); 

but.value="delete row"; 

but.setAttribute("onclick","callJavascriptFunction()"); 
//this is not working 

but.onclick="callJavascriptFunction()" 
//this is also not working 

document.getElementById("but").onclick="callJavascriptFunction()" 
//this is also not working 

but.id="but"+inc; 

Có cách nào để giải quyết này ?? Plz giúp tôi, nhờ trước

Trả lời

19

thử điều này:

but.onclick = callJavascriptFunction; 

hoặc tạo nút bằng cách gói nó với yếu tố khác và sử dụng innerHTML:

var span = document.createElement('span'); 
span.innerHTML = '<button id="but' + inc +'" onclick="callJavascriptFunction()" />'; 
+0

Làm việc của nó .... Cảm ơn rất nhiều :) – sanjeev

+0

dude tất cả mọi thứ là ok .. Nhưng tôi không thể cung cấp cho ID bằng cách concatinating chuỗi: nhưng và inc ... Plz giúp ...... "nhưng ' + inc + '"điều này không hoạt động – sanjeev

+0

thử: span.firstChild.setAttribute (" nhưng "+ inc); sau span.innerHTML, tôi cũng giả định rằng inc là một biến, và phải được thiết lập trước khi nó được sử dụng.cho tôi biết nó vẫn không hoạt động cho bạn. – jerjer

10

Xóa() khỏi các biểu thức của bạn không hoạt động sẽ nhận được kết quả mong muốn mà bạn cần.

but.setAttribute("onclick",callJavascriptFunction); 
but.onclick= callJavascriptFunction; 
document.getElementById("but").onclick=callJavascriptFunction; 
+1

Tại sao setAttribute khi bạn cũng làm onclick? Không phải tất cả các trình duyệt chỉ hỗ trợ onclick? – TJHeuvel

+0

Chỉ hiển thị các đường dây không hoạt động có thể được thực hiện để hoạt động. –

+0

Cảm ơn, điều đó đã giúp tôi! –

1
but.onclick = callJavascriptFunction; 

không dấu ngoặc kép không có dấu ngoặc đơn.

+0

nếu bạn muốn đối số thì sao? – Alex

2

Hãy thử
but.addEventListener('click', yourFunction) Lưu ý vắng mặt của parantheses () sau Tên chức năng. Điều này là do bạn đang gán chức năng, không gọi nó.

2

Hãy thử điều này:

var inputTag = document.createElement("div");    
inputTag.innerHTML = "<input type = 'button' value = 'oooh' onClick = 'your_function_name()'>";  
document.body.appendChild(inputTag); 

này tạo ra một nút bên trong một DIV mà hoạt động hoàn hảo!

2

Tôi đã gặp sự cố tương tự nhưng không có bản sửa lỗi nào trong số các bản sửa lỗi này hoạt động. Vấn đề là nút của tôi chưa có trên trang. Việc sửa chữa cho điều này rốt cuộc là đi từ này:

//Bad code. 
var btn = document.createElement('button'); 
btn.onClick = function() { console.log("hey"); } 

này:

//Working Code. I don't like it, but it works. 
var btn = document.createElement('button'); 
var wrapper = document.createElement('div'); 
wrapper.appendChild(btn); 

document.body.appendChild(wrapper); 
var buttons = wrapper.getElementsByTagName("BUTTON"); 
buttons[0].onclick = function(){ console.log("hey"); } 

tôi không có đầu mối ở tất cả các lý do tại sao các công trình này. Thêm nút vào trang và đề cập đến nó theo bất kỳ cách nào khác không hoạt động.

+0

Tôi đã trả lời câu hỏi này từ rất lâu trước đây và sẽ không còn giới thiệu nó nữa. Thay vào đó, sử dụng 'btn.addEventListener ('click', hàm (event) {do stuff});' –

1

Mã này hoạt động tốt với tôi và trông đơn giản hơn. Cần thiết để gọi một hàm với tham số cụ thể.

var btn = document.createElement("BUTTON"); //<button> element 
var t = document.createTextNode("MyButton"); // Create a text node 
btn.appendChild(t); 

btn.onclick = function(){myFunction(myparameter)}; 
document.getElementById("myView").appendChild(btn);//to show on myView 
0

but.onclick = function() { yourjavascriptfunction();};

hoặc

but.onclick = function() { functionwithparam(param);};

+0

> Hạn chế đáng kể với các sự kiện nội tuyến là không giống như các trình lắng nghe sự kiện được mô tả ở trên, bạn chỉ có thể gán một sự kiện nội tuyến. Sự kiện nội tuyến được lưu trữ dưới dạng thuộc tính/thuộc tính của phần tử [doc], có nghĩa là nó có thể được ghi đè. (https://stackoverflow.com/a/6348597/1872046) –

Các vấn đề liên quan