Передача объекта json в функции href - JavaScript

Мне нужно передать объект json в функцию, как указано ниже в href, но этот код JS не оценивается. Так может ли кто-нибудь предложить обходной путь или решение для этого?

function function_test(option,jsonObj){
   displayMessage(str);
}

function function_prepare_div(){   
  var str  = "";
  var jsonResposneObj = getJson();//function to get jsonResponseObj
  for(i=0;i<jsonResponseObj.length;i++){
    str += "<a href='function_test( " + i + "," + jsonResposneObj.dataObj[i] +")'>1. " + jsonResposneObj.dataObj[i].objName + "</a></br>";
  }  
    return str;
}

P.S. Я не могу вернуть jsonResponse после вызова функции.

что такое function_test, и вы помещаете это в href?

Joe Warner 21.03.2018 19:57

Что означает передать объект в функции href? Покажите нам весь соответствующий код.

Scott Marcus 21.03.2018 19:57

Я добавил код в редактирование, проверьте это. Я обновляю div на странице html динамически сгенерированным контентом и передаю объект JSON, полученный в ответ на соответствующий вызов функции.

user2971907 21.03.2018 20:00

Почему вы хотите это сделать? Вы хотите передать результатfunction_test() в атрибут href?

pawel 21.03.2018 20:09
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
1 595
3

Ответы 3

Вместо использования встроенного JS добавьте элемент, используя соответствующие методы DOM, а затем прикрепите прослушиватель событий.

Например, что-то вроде

const a = container.appendChild(document.createElement('a'));
a.href = function_test(1, jsonResponse);
a.textContent = '1. ' + function_test(1, jsonResponse);

(убедитесь, что function_test возвращает URL)

Функции (или любой JavaScript в этом отношении) вообще не принадлежат <a href = "">.

Гиперссылки предназначены для навигации, а не для хуков JavaScript. Использование их только для запуска некоторого JavaScript - неправильное использование тега <a>. Это было обычным явлением 20 с лишним лет назад (до появления веб-стандартов), но сегодня оно ужасно устарело и совершенно неверно. Использование гиперссылки для запуска JavaScript семантически некорректно и может вызвать проблемы у людей, которые используют вспомогательные технологии (например, программы чтения с экрана) для навигации по странице.

Практически любой элемент, который действителен в body веб-страницы, поддерживает событие click, и большинство из них лучше подходят для того, что вы хотите сделать.

Что вам нужно сделать, так это зарегистрировать вашу функцию как обратный вызов для события click некоторого элемента, например:

// An example of a JSON response
var jsonResponse = '{"key1":10,"key2":true,"key3":"foo"}';

// Get reference to any element that supports a click event that
// can be safely used as a JavaScript trigger
var span = document.getElementById("fakeLink");

// Set up an event handling callback function for the click event of the element
span.addEventListener("click", function(){
  //  Call the function and pass it any arguments needed
  processJSON(1, jsonResponse, this);
});

// Do whatever you need to do in this function:
function processJSON(val, json, el){
 console.info(val, json);
 el.textContent = val + json;
}
/* Make element look & feel like a hyperlink */
#fakeLink { cursor:pointer; text-decoration:underline; } 
#fakeLink:active { color:red; }
<span id = "fakeLink">Click Me</span>

var json = {
  foo: 'bar'
};


var func = function(data) {
  alert(data.foo);
}

$('body').append("<button onclick='func(" + JSON.stringify(json) + ")'>BUTTON</button>");
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Другие вопросы по теме