Не могу получить текст элемента

227
26 января 2018, 22:15

Есть элемент li

По нажатию на него, я хочу получить текст, т.е. "2"

Однако переменная page - пустая

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

P.S. Я думаю это не важно, но элемент li добавляется динамически...

Answer 1

Контекст кода, который находится непосредственно в атрибуте onclick - элемент, чей атрибут. Но когда Вы вызываете там функцию clicki(), это происходит в глобальном контексте. Так что this внутри функции - это window.

Передавайте элемент в функцию как параметр:

function clicki(el) { 
  var page = $(el).text(); 
  console.log(page); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<ul> 
  <li onclick="clicki(this)">1</li> 
  <li onclick="clicki(this)">2</li> 
  <li onclick="clicki(this)">3</li> 
</ul>

или используйте Function.prototype.call:

function clicki() { 
  var page = $(this).text(); 
  console.log(page); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<ul> 
  <li onclick="clicki.call(this)">1</li> 
  <li onclick="clicki.call(this)">2</li> 
  <li onclick="clicki.call(this)">3</li> 
</ul>

READ ALSO
Почему этот код работает медленно?

Почему этот код работает медленно?

Это мой первый скрипт, поэтому скорее всего тут куча идиотских решенийЕго задача: открыть спрятанное меню при клике, затемнить некоторые...

244
Не воспроизводится audio на iOS (на iPhone)

Не воспроизводится audio на iOS (на iPhone)

У меня такая проблемаЕсть JS который воспроизводит аудио на сайте и везде не работает, если пользователь заходит с iPhone

187
Как заставить хром запомнить мои данные из автокомплита?

Как заставить хром запомнить мои данные из автокомплита?

Есть у тега input атрибут autocomplete, вот по нему докиhttps://html

298
изменить позицию отображения L.popup

изменить позицию отображения L.popup

в leaflet js отображается на карте маркер при нажатии на него открывается bindPopup(popup)

217