Как я могу передать динамическую переменную для функции в JS? - PullRequest
0 голосов
/ 20 февраля 2019

Попытка передачи идентификаторов динамически нарушает функцию:

<p id="email1" onclick="mailTo(this.id,'com','abc','info','My Website','I have a question for you: ')">Send us an email</p>
<p id="email2" onclick="mailTo(this.id,'org','xyz','support','My Other Website','I want to report a problem with your website.')">Report Website Problems</p>

Жесткое кодирование document.querySelector('#email') успешно, но идентификатор должен быть динамическим.Консоль печатает правильно.Ошибка: qS.addEventListener is not a function.

function mailTo(idx, tld, domain, account, site, bodyText) {
  let qS = `document.querySelector('#${idx}')`;
  console.log(qS);
  let arrEmail = [tld, domain, account, site, bodyText];
  const buildEmail = arr => `${arr[2]}@${arr[1]}.${arr[0]}?subject=From%20the%20${arr[3]}%20website&body=${arr[4]}`;
  qS.addEventListener("click", event => {
    let str = `mailto:${buildEmail(arrEmail)}`;
    location.href = str;
  });
}

Песочница: https://codesandbox.io/s/p8k45v350

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Динамически создать только селекторный параметр ...

let qS = document.querySelector(`#${idx}`);
0 голосов
/ 20 февраля 2019

Если вы измените

    let qS = `document.querySelector('#${idx}')`;

на

    let qS = this;

, ваш код работает.Но вам не нужно указывать идентификатор для запроса элемента, так как вы можете получить к нему доступ с помощью this.

0 голосов
/ 20 февраля 2019

Это вам поможет:

function mailTo(...items)
{
console.log(items[0].id);
}
<p id="email1" onclick="mailTo(this,'com','abc','info','My Website','I have a question for you: ')">Send us an email</p>
<p id="email2" onclick="mailTo(this,'org','xyz','support','My Other Website','I want to report a problem with your website.')">Report Website Problems</p>
...