#javascript #html #json
Вопрос:
Я создаю динамические строки таблицы и tds
в ней. В последнем td мне нужны теги привязки с onclick
событием, передающим некоторые данные в виде строки json. Он работает нормально, если я не оставляю места для любого значения строки json, он преобразует все оставшиеся данные в атрибуты html после пробела. Я использую JSON.stringify(data)
, но чувствую, что он не преобразовал его в реальную строку. Я не знаю!
Последние td строк таблицы в html просто отлично работают, даже если в значениях есть пробелы, так как ключи и значения являются данными формы. Я использую echo json_encode
функцию onclick в
<a href="#" data-toggle="modal" data-target="a{{$i}}"
onclick='show_detail_modal(JSON.stringify(<?php echo json_encode($data);?>))'
<i class="far fa-eye fa-sm"></i>
</a>
var str_data = JSON.stringify(data);
var submit_type_text = $(form).find('button[type=submit]').text();
var tbl_id = main_form_id.replace('tabform', '') 'table';
var last_tr = $('#' tbl_id).children('tbody').children('tr:last');
var last_tr_no_plus_one = parseInt($(last_tr).children('td:first').text()) 1;
var actions = '<a href="#" data-toggle="modal" data-target="a' last_tr_no_plus_one
'"onclick=show_detail_modal(' str_data ') style="color: inherit;"><i class="far fa-eye fa-sm"></i></a>amp;nbsp;';
var last_td_of_last_tr = actions;
var inputs = $(form).find('.input');
var tr_and_tds = '<tr>';
tr_and_tds = '<td>' last_tr_no_plus_one '</td>';
$.each(inputs, function(a, b){
tr_and_tds = '<td>' $(b).val() '</td>';
});
tr_and_tds = '<td>';
tr_and_tds = last_td_of_last_tr;
tr_and_tds = '</td>';
tr_and_tds = '</tr>';
$('#' tbl_id).append(tr_and_tds);
Обратите внимание, что после пробела в Нью-Йорке он преобразует остальные данные в атрибуты
Комментарии:
1. Проблема начинается намного раньше. Вы не можете заключить значение атрибута в
"
, когда значение также используется"
(как это имеет место в JSON)2. «Последний td строк таблицы в html просто отлично работает» — потому что вы используете один qoute
'
для значения атрибута3. Не создавайте элементы путем объединения строк. Используйте методы DOM, такие как
document.createElement
, а затемsetAttribute()
4. @mohsinali на самом деле вам не хватает, чтобы закрыть
a
>
скобку тегов . onclick=’show_detail_modal(JSON.stringify(<?php echo json_encode($данные);?>))'<? php echo json_encode($данные);?>>
.. </a>5. это просто ошибка при копировании и вставке на этот сайт 🙂
Ответ №1:
Поместите одинарные кавычки вокруг onclick
атрибута, так как JSON использует двойные кавычки. Точно так же, как вы делаете в PHP-коде.
Используйте шаблонные литералы, чтобы упростить замену переменных в строки.
var actions = `<a href="#" data-toggle="modal" data-target="a${last_tr_no_plus_one}" onclick='show_detail_modal(JSON.stringify(${str_data}))' style="color: inherit;"><i class="far fa-eye fa-sm"></i></a>amp;nbsp;`;
Обратите внимание, что это не будет работать, если str_data
содержит одинарные кавычки.
Комментарии:
1. Это плохой вопрос или что-то в этом роде 🙁
2. ладно, не бери в голову, в любом случае спасибо тебе, приятель, за твою помощь
3. извини, бармен, у меня проблема, если ты там
4. когда он приземляется в «show_detail_modal()» по щелчку, он отображается как объект json, а не как строка, как я могу иметь его там как обычную строку
5. Попробуйте использовать
show_detail_modal(JSON.stringify(${str_data}))