Строка в вызове функции обрабатывается иначе, чем строка, определенная в функции - странная ошибка - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь создать функцию, которая может редактировать dom по клику, в которую я могу передавать различные элементы, чтобы уменьшить дублирование кода.Однако, когда я передаю идентификатор в виде строки в функции, он не будет захватывать элемент DOM.Однако, если я использую тот же текст в строке, объявленной в функции, это произойдет.Я пробовал консоль, регистрируя выходные данные и используя ту же самую строку, определенную мной, в запросе dom, и это работает, однако переменная, определенная в прототипе функции, не кажется мне необъяснимой.

ex будет работать var x = document.getElementById ('button1'). Style.display = "block";

, но var x = document.getElementById (str1) .style.display =«блок»;не будет, где str берется из заголовка функции, даже если tho str console.logs ("button1");однако если я объявляю переменную r = "button1" внутри функции var x = document.getElementById (r) .style.display = "block";- это будет работать, почему строка передается в функцию по-разному

пример скрипта, иллюстрирующий проблему https://jsfiddle.net/peacefulgoldfish/wpvyu5fr/20/

html

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title></title>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <meta name="robots" content="noindex, nofollow">
  <meta name="googlebot" content="noindex, nofollow">
  <meta name="viewport" content="width=device-width, initial-scale=1">


  <script
    type="text/javascript"
    src="/js/lib/dummy.js"

  ></script>

    <link rel="stylesheet" type="text/css" href="/css/result-light.css">

  <style type="text/css">
    #div1 {
  width: 100px;
  height: 30px;
  background-color: red;
}

#button1{
  display: none;
  width: 100px;
  height: 30px;
  background-color:blue;
}
  </style>
  <!-- TODO: Missing CoffeeScript 2 -->

  <script type="text/javascript">




function switchv(){
switchbutton("'block'", "'button1'");
}

function switchbutton(str, str2){
console.log(str2)
r = str2;

    var x = document.getElementById(r).style.display="block";

}



</script>

</head>
<body>

<button id="div1" onclick="switchv();">

</button>

<div id="button1">

</div>

  <script>
    // tell the embed parent frame the height of the content
    if (window.parent && window.parent.parent){
      window.parent.parent.postMessage(["resultsFrame", {
        height: document.body.getBoundingClientRect().height,
        slug: ""
      }], "*")
    }
  </script>
</body>
</html>

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

При переходе по ссылке на отправленную скрипту кажется, что вы вызвали аргумент str в функции switchbutton str1, они должны быть одинаковыми.Также двойные кавычки не нужны.

function switchbutton(str, str2){
  var x = document.getElementById(str2);
  x.style.display = str;
} 
0 голосов
/ 20 сентября 2018

Удалите одинарные кавычки вокруг "buttton1".

Эта функция будет работать:

function switchv(){
    switchbutton("block", "button1");
}

Редактировать: Кажется, jsfiddle не нравитсяonclick=switchv(), хотя внутри отдельной html-страницы это работает.

Настройка функции onclick внутри части JavaScript, похоже, работает.Вот модифицированная версия: https://jsfiddle.net/wpvyu5fr/40/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...