2012-08-24 72 views
10

Tôi muốn chuyển một đối tượng làm tham số cho hàm Onclick bên trong một chuỗi. Một cái gì đó như follwing:javascript: chuyển một đối tượng làm đối số cho hàm onclick bên trong chuỗi

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" onclick="somelistener(' + obj + ')" />'; 
    parentobj.appendChild(o.firstChild); 
} 

Rõ ràng, điều này không hiệu quả. Bất cứ ai có bất kỳ ý tưởng? CÁM ƠN!

Một phiên bản hoàn thiện hơn, theo đề nghị của @Austin

<!DOCTYPE html> 
<html> 
<body> 
<style type="text/css"> 

</style> 
<p id="test">test</p> 
<p id="objectid"></p> 

<script> 
function test(s){ 
    document.getElementById("test").innerHTML+=s; 
} 

function somelistener(obj){ 
    test(obj.id); 
} 

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" onclick="somelistener(' + obj + ')" />'; 

    o.onclick = function() { 
     someListener(obj) 
    } 
parentobj.appendChild(o.firstChild); 
} 

myfunction(document.getElementById("objectid"),document.getElementById("test")); 

</script> 

</body> 
</html> 
+0

@Austin tôi không chắc chắn nếu tôi hiểu câu trả lời của bạn c orrect. Nhưng như tôi đã thử trong phiên bản hoàn chỉnh ở trên, nó cũng không hoạt động. Bạn có thấy vấn đề không? – Elizabeth

+0

@ scott.korin Thx Scott. Nhưng sau khi tôi thay đổi cách viết hoa, nó vẫn không hoạt động. – Elizabeth

+0

@Austin BTW, ngay cả khi tôi thay đổi o.nhấp vào o.firstChild.onclick, điều đó cũng không hoạt động, nếu đó có thể là một vấn đề. – Elizabeth

Trả lời

18

Ví dụ trên không hiệu quả vì đầu ra của obj sang dạng text [Object object], vì vậy về cơ bản, bạn đang gọi someListener([Object object]).

Trong khi bạn có thể hiện của các phần tử trong o, liên kết với nó nhấp chuột sử dụng javascript:

function myfunction(obj,parentobj){ 
    var o=document.createElement("div"); 
    o.innerHTML='<input type="button" />'; 

    o.onClick = function() { 
     someListener(obj) 
    } 

    parentobj.appendChild(o.firstChild); 
} 

tôi đã tạo ra một fiddle làm việc cho bạn ở đây: JSFiddle

-8

Chỉ cần vượt qua nó như thế này :

o.innerHTML='<input type="button" onclick="somelistener(this)" />'; 
+0

Việc truyền 'điều này' sẽ không hoạt động. Đối tượng được truyền là chắc chắn * không * có thể nhận dạng được bởi 'this'. Đã bỏ phiếu. –

0
function myfunction(obj,parentobj){ 
     var o=document.createElement("div"); 
     o.innerHTML="<input type='button' onclick='somelistener("+JSON.stringify(obj)+")'/>"; 
            parentobj.appendChild(o.firstChild); 
      } 
    // my similar problem, function a was called in a jsonArray loop in the dataTable initiation 
    function a(data, type, obj) { 
         var str = ""; 
         str += "<span class='button-group'>"; 
         str +="<a onclick='chooseData1("+JSON.stringify(obj)+")'>[选择]</a>"; 
         str += "</span>"; 
         return str; 
              } 
function chooseData1(data){ 
         console.log(data); 
        } 
+0

Tôi có một vấn đề tương tự và tôi sửa nó theo cách này –

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