У меня есть JS-код, который динамически выводит HTML-код в ячейку Datatable следующим образом.
$('td:eq(7)', nRow).html("<a onclick='showOrder("+orderId.toString()+");' style='cursor:hand;color:blue'>" +orderNo + "</a>");
function showOrder(id) {
var Window = window.open( orderURL+"/order?orderId=" + id, '_blank');
}
showOrder - это просто функция вызова, когда нажата ячейка Datatable. Проблема здесь orderId - это что-то вроде 6494933473411334145, которые превышают диапазон длинного типа JS. Окно showOrder, действительно открытое, имеет неправильный идентификатор, например 6494933473411330000. Я пробовал много способов решить проблему, но единственный способ работы - это следующее:
$('td:eq(7)', nRow).html("<a href='"+orderURL+"/order/toTag?orderId=" + orderId +"' target='_blank' style='cursor:hand;color:blue'>" +orderNo + "</a>");
Вместо вызова функции, кодирование id внутри html может решить проблему. Кто-нибудь знает, как решить эту проблему, используя способ вызова функции?
Мой коллега находит решение просто следующим образом:
var id = "'"+orderId+"'"
showOrder(id) {
var Window = window.open( orderURL+"/order?orderId=" + id, '_blank');
}
Кажется, orderId будет обрабатываться как Long, а toString в этом случае работать не будет. Только путем преобразования Long в String перед его использованием можно избежать проблемы.