Событие срабатывает только при втором клике jQuery
Взял логику многоязычности с этого сайта.
Короче есть ссылка с атрибутом onclick. Она передает параметр в следующий код и тем самым включая нужный язык:
<a class="langswtch" onclick="setLang('en')"><img class="lang" src="images/langen.png"></a>
<a class="langswtch" onclick="setLang('de')"><img class="lang" src="images/langde.png"></a>
<a class="langswtch" onclick="setLang('ru')"><img class="lang" src="images/langru.png"></a>
function setLang(setLang){
$('body').data('lang-active',setLang);
lang('lang','data-lang','body');
};
Но так же у меня есть input куда через data-lang передается значение из конфига переводов.
<input type="hidden" class="inputtext" data-lang="house"></input>
<img class="house" src="">
Потом через следующий скрипт у меня значение из input передается в атрибут src тега img:
$input = $('input.inputtext').text();
$img = $('img.house');
$img.attr('src', $input);
Но прикол в том, что при нажатии на кнопку передается значение в input с этим же кликом это значение должно передаться в src, но т.к. это происходит в одном клике, как я понял, то при первом клике всегда передается старое значение, и только при втором новое.
function setLang(setLang){
$('body').data('lang-active',setLang);
lang('lang','data-lang','body');
$input = $('input.inputtext').text();
$img = $('img.house');
$img.attr('src', $input);
};
Вот это как то нужно пофиксить, не знаю как. Может кто что то подсказать?
Заранее спасибо!
Ответы (1 шт):
Не достаточно информации, вы не привели пример функции lang() {...} Поэтому логика неясна.
Но из примера выше видно, что вы пытаетесь взять значение input некорректно. Используйте следующий код:
let value = $('input.inputtext').val();
Так же подозреваю, что при обновлении значение в этом инпуте нужно использовать что то типа:
$('input.inputtext').val(newValue).change();
То есть, не только установить новое значение, но и вызвать событие change() по которому в коде вы сможете слушать это событие например вот так:
$('input.inputtext').on("change", function(event){
// какая то ваша логика
});