Событие срабатывает только при втором клике 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 шт):

Автор решения: Bookamba

Не достаточно информации, вы не привели пример функции lang() {...} Поэтому логика неясна.

Но из примера выше видно, что вы пытаетесь взять значение input некорректно. Используйте следующий код:

let value = $('input.inputtext').val();

Так же подозреваю, что при обновлении значение в этом инпуте нужно использовать что то типа:

$('input.inputtext').val(newValue).change();

То есть, не только установить новое значение, но и вызвать событие change() по которому в коде вы сможете слушать это событие например вот так:

$('input.inputtext').on("change", function(event){
  // какая то ваша логика
});
→ Ссылка