Не вызывается функция по onclick

88
03 июля 2021, 22:10

Есть такой JS код:

$(function() {
   //тут отправляем пробегаем по массиву и выводим каждый элемент {
     $("#block").append("<a href='javascript:;' onclick='my_func(1, 10)'>Link</a>");
   //}
   function new_func(....) {
       .....
   }
});
function my_func(id, amt) {
   ....
   new_func();
}

После клика на добавленную ссылку должна вызваться функция my_func , там выполняется код, и после должна вызваться функция new_func , но вызова не происходит, получаю ошибку:

Uncaught ReferenceError: new_func is not defined

at my_func

at HTMLAnchorElement.onclick

Пробовал поместить my_func под $(function() { но тогда получаю такую ошибку:

Uncaught ReferenceError: my_func is not defined

at HTMLAnchorElement.onclick

Что я делаю не так?

$(function() {
  $("#block").append("<a href='javascript:;' onclick='my_func(1, 10);'>Link</a>");
  function new_func() {
    console.log('new_func');
  }
});
function my_func(id, amt) {
  console.log(amt);
  new_func();
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<div id="block"></div>

Answer 1

Предложу дом елементы создавать не как строку а как дом елементы :

(function() { 
 
  let a = document.createElement('a') 
  a.textContent = '123' 
  a.href = 'javascript:;' 
  a.onclick = () => myFunc(1, 2) 
 
  document.getElementById('block').appendChild(a) 
 
  function myFunc(id, amt) { 
    console.log(amt) 
    newFunc() 
  } 
 
  function newFunc() { 
    console.log('newFunc') 
  } 
})();
<div id="block"></div>

тут правда без JQuery

READ ALSO
Убрать пробелы в url

Убрать пробелы в url

Ссылка на пост формируется из указанного пользователем заголовкаНапример заголовок "Привет мир" выдасть url /post/privet-mir , но если написать "При...

103
написать в разных файлах js/html fancybox

написать в разных файлах js/html fancybox

Доброго времени сутокИмеется код например такой

70
Создать копию массива объектов с изменением названия поля

Создать копию массива объектов с изменением названия поля

Получаю с сервера массив объектов tempArrayПодскажите, как создать копию этого массива и переименовать поле name на title

93