Вопрос или проблема
Простой код лучше всего объясняет мою проблему:
<html>
<head>
<script>
function showDiv (divId, dat){
document.getElementById(divId).innerHTML = dat ;
document.getElementById(divId).style.display = "block" ;
}
</script>
</head>
<body>
<div onclick="showDiv(1, '<div onclick='showDiv(2, 'test C');'>test B</div>')">test A</div>
<div id="1" style="display:none;"></div>
<div id="2" style="display:none;"></div>
</body>
</html>
аргумент функции onclick содержит функции с аргументами (строками). Это не работает таким образом. Я думаю, что проблема в апострофах. Пожалуйста, помогите. Спасибо.
Мой код выше лучше всего объясняет мою проблему
Ответ или решение
Вопрос, который вы подняли, касается передачи строковых аргументов в функции JavaScript, где используются кавычки и апострофы. Давайте подробно разберем вашу проблему и предложим решение.
Проблема
В вашем коде для элемента <div>
используется обработчик события onclick
, который вызывает функцию showDiv
. Однако, в передаваемом аргументе вы ожидаете, что внутри строки будет содержаться другой элемент <div>
, который также вызывает функцию showDiv
. Ваша строка имеет сложную вложенность кавычек, что и вызывает ошибку.
Вот, как вы записали:
<div onclick="showDiv(1, '<div onclick='showDiv(2, 'test C');'>test B</div>')">test A</div>
Проблема возникает из-за того, что когда вы используете одинарные кавычки как для внешней функции (например, для onclick
), так и для внутренних строк (например, showDiv(2, 'test C')
), это создает конфликты.
Решение
Чтобы сделать ваш код работающим, вы можете использовать разные типы кавычек (одинарные и двойные) для обозначения строк. Вот исправленный вариант вашего кода:
<html>
<head>
<script>
function showDiv(divId, dat) {
document.getElementById(divId).innerHTML = dat;
document.getElementById(divId).style.display = "block";
}
</script>
</head>
<body>
<div onclick="showDiv(1, '<div onclick=\"showDiv(2, \'test C\');\">test B</div>')">test A</div>
<div id="1" style="display:none;"></div>
<div id="2" style="display:none;"></div>
</body>
</html>
Что изменилось
-
Экранирование кавычек: В функции
onclick
мы используем двойные кавычки для внешних строк. Внутри элемента, который будет сгенерирован, одинарные кавычки, которые передаются в функциюshowDiv(2, 'test C')
, были экранированы с помощью обратного слэша (\'
). Это позволяет избежать конфликта с внешними кавычками. -
Чистота кода: В результате изменений код стал более предсказуемым и понятным, что делает его не только корректным, но и более читаемым.
Заключение
Использование различных типов кавычек и экранирование символов — ключ к успешному созданию вложенных функций с передачей строковых аргументов в JavaScript. Это особенно важно, когда страница использует события, такие как onclick
, для динамического изменения содержимого. Убедитесь, что вы используете правильные методы экранирования и выбираете подходящие типы кавычек, чтобы избежать проблем с синтаксисом.
Если у вас есть дополнительные вопросы или вам нужна помощь с другими аспектами JavaScript, не стесняйтесь обращаться за помощью.