01/10/2018, 15:53

Lỗi khi dùng onclick: Uncaught SyntaxError: Unexpected end of input loadInfoPost([object

Em có tạo 1 page html,sau đó xét window.onload cho trang này.
Đại khái, là em mắc cái lỗi: khi xét cái onclick nhưng vì hàm này được đổ ra dưới dạng text
nên mà tham số là object nên nó không thể + đc, dạng như là: 'onclick=“hàm( ‘+Object+’)”
Ace gúp em với(nếu chưa rõ thì em post code ở dưới)
Em có hiểu lỗi nhưng thật sự ko tìm đc keywword để mà stackoverflow ngoài cách hỏi mng

Khi load trang thì sẽ đổ dữ liệu ra trang theo như hàm sau:

//Hàm này để sinh msg em truyền là 1 mảng các đối tượng trả về từ controller: và đã JSON.parse
function dumpData(msg)
{
    var events = document.getElementById('events').innerHTML;
    var str = ';
    for (var i =  0; i < msg.length; i++)
    {
        str += '<button  onclick=loadInfoPost('+msg[i]+')>Sửa</button> '
    }
    events +=str;
}
//Hàm gọi từ onclick đây ạ:
function loadInfoPost(msg)
{
    console.log(msg);
    document.getElementById('title_update').value=msg.title;
    tinyMCE.get('discountdetail_update').setContent(msg.discountdetail);
    tinyMCE.get('thumbnail_update').setContent('../images/photos/'+msg.thumbnail);
}

chạy xong thì nó sinh ra lỗi Uncaught SyntaxError: Unexpected end of input loadInfoPost([object
Ko biết hiểu lỗi có đúng k nữa ~~

Làm lại từ đầu viết 18:02 ngày 01/10/2018

2h trôi qua, Ko ai hiểu điều mình muốn nói hay như nào ạ?
Nếu truyền vào là 1 string thì lại được, nhưng object lại báo lỗi

*grab popcorn* viết 18:07 ngày 01/10/2018
  1. Theo mình biết events nó ko ref tới innerHTML. Nên việc bạn evnts += str sẽ không add vô được :3
  2. Về scope của function. Nếu bạn bỏ mớ kia trong onload, thì nó chỉ nằm trong onload thui. Bên ngoài không truy cập được. Muốn truy cập được có thể dùng document.loadInfoPost = loadInfoPost hoặc window.loadInfoPost = loadInfoPost để đặt nó ngoài global.
Làm lại từ đầu viết 17:53 ngày 01/10/2018
  1. Em sửa cái này rồi ạ
  2. Em ko hiểu ý anh lắm , nhưng mà em vẫn thử để window.loadInfoPost = loadInfoPost ở cuối, nhưng KQ vẫn vậy ạ
    _Ý của em là khi em truyền cái msg[i] vì nó là 1 đối tượng nên ko thể + với 1 string, chính xác vấn đề của em là như này ạ: https://stackoverflow.com/questions/12109811/javascript-pass-an-object-as-the-argument-to-a-onclick-function-inside-string
    _Em có nghĩ ra cách trên trc khi em tra trên stackoverflow nhưng vẫn ko đc:
    +Em đánh cho mỗi button 1 id
    +và sét sự kiện onclick cho nó bên ngoài cái string nhưng báo lỗi vì cái id đó chưa đc load
    Văn em hơi lủng củng, anh giúp em với
*grab popcorn* viết 18:00 ngày 01/10/2018

Ặc, mình hiểu sai là ko thấy cái hàm đó.

Để truyền qua onclick vậy thì mình có vào cách:

  1. Cho msg thành global. Truyền index thôi. Khi dùng thì lấy index rồi gọi msg[index] là ok.
  2. Dùng closure. Vì hơi khó giải thích nên mình có code mẫu:
    https://jsfiddle.net/55gntL9w/
  3. Cách này ko xài onclick nữa. Mà CreateElement rồi addEventListener. Sau đó append vào thằng cha.
null viết 18:04 ngày 01/10/2018

Vì bạn chèn object vào attribute, trong khi nó chỉ chứa được string, bạn chỉ cần chuyển về dạng string khi chèn là được. Khi gọi hàm loadInfoPost thì chuyển ngược lại thành object để xử lý.

Làm lại từ đầu viết 17:59 ngày 01/10/2018

ách 1 giải quyết tốt quá anh ạ,đơn giản vậy mà em ko nghĩ ra, đầu óc chán quá
c2,3 vì em ms học javascript nên hơi khó hiểu.Em sẽ đọc lại kĩ hơn
Em cảm ơn anh nhé, chúc a 1 ngày tốt lành

Làm lại từ đầu viết 17:55 ngày 01/10/2018

Vâng ạ, em có nghĩ tới cách đó rồi, JSON stringify phải không ạ?
Nhưng object này nó có 1 attribute là string chứa HTML có dấu < > ’ " … mà em ko muốn encode nó nên em ném vào object đấy ạ
Em cảm ơn anh nhé

Bài liên quan
0