A-AA+then

ขอ ถามเรื่อง การใส่event ให้กับ input ที่ create elementขึ้นมา

1,381
ผมจะใส่event ลงไปใน inputที่ใช้ javascript สร้างขึ้นมายังไงครับ ยังไม่ค่อยเข้าใจ
อันนี้โค๊ดที่ผมใชสร้าง ตารางครับ
function increaserow(){
    
        var line =parseInt(document.getElementById("hdline").value);
        line++;
    alert(line);
var myTable=document.getElementById('myTable')
var current_row=document.getElementById('myTable').rows.length
var x=myTable.insertRow(current_row)        // insert new row
var y=myTable.rows                // get attribute of row
var a=x.insertCell(0)            // assign position of cell 1 in new row
var b=x.insertCell(1)            // assign position of cell 2 in new row
var c=x.insertCell(2)            // assign position of cell 3 in new row
    a.innerHTML="<input type='text' name='new_model[]'  id='new_Model"+line+"' />"
    b.innerHTML="<input type='text' name='new_image[]'  id='im"+line+"' />"
    c.innerHTML="<input type='text' name='new_pdf.[]' id='pdf"+line+"' />"
    
    document.getElementById("hdline").value=line;
}

5 ความคิดเห็น

วิธีง่ายสุด ก็เขียน event ลงใน ข้อความ (text) เลยครับ โดยให้มันไปเรียกฟังก์ชั่นภายนอกที่เตรียมไว้

a.innerHTML="<input type='text' name='new_model[]'  id='new_Model"+line+"' onkeyup=function(){dokeyup(this)} />"

บางครั้ง เราอาจได้ทดลองวิธีนี้แล้ว แต่อาจไม่สำเร็จ โดยทั่วไปก็เป็นเพราะ เขียนฟังก์ชั่นรองรับ event ไม่ถูกรูปแบบ

และที่สำคัญจะต้องเรียกไปทำงานที่ฟังก์ชั่นภายนอกเท่านั้น

สำหรับ browser รุ่นใหม่ๆ บางครั้ง วิธีข้างบนก็ไม่ได้ผลเหมือนกัน ซึ่งบางทีก็หาสาเหตุไม่ได้ และ เพื่อหลีกเลี่ยงปัญหาด้านบน จึงควรใช้คำสั้ง Javascript กับ DOM ระดับ 2 แทน ซึ่งจะทำให้ไม่พบปัญหาดังกล่าวอ้ก

ถ้าเป็น GAjax จะใช้ addEvent
1

ครับพี่ ผมเลย ลอง แบบนี้แต่มันไม่รันในIE
    var Model =document.createElement("input");
    Model.type="text";
    Model.name = 'new_Model[]';
    Model.id='new_Model'+line;
    Model.setAttribute("onclick","BrowseServer( 'Images:/', 'new_Model"+line+"');");
    a.appendChild(Model);

ปัญหากะคือจะเรียกใช้file manager ของ ckfinderอะครับ
 
2

setAttribute  ใช้ไม่ได้ครับ

ให้ดู DOM ระดับ 2 ครับ ซึ่งมีการเรียกใช้แตกต่าง
กันในแต่ละ browser

บนเว็บก็เคยเขียนไว้ ลองหาดูครับ
3

ถ้าเขียนโค้ดแบบนี้ ใช้

Model.onclick = function(){
  alert('do some thing');
}
4

ขอบคุณครับ พี่ ผมยังไม่เข้าใจdom ระดับ 2เลยครับ  อิอิ แก้ผ้าเอาหน้ารอดไปก่อนครับ อิอิ
5
^