Встраивать функцию javascript в другую функцию javascript

У меня есть форма с условным полем, которое отображается только в том случае, если пользователь выбирает переключатель для «другого». Если я удалю условие в этом поле, моя исходная функция javascript будет работать; однако с условным условием я не могу заставить его правильно стрелять.

В форме есть событие cf.add, которое срабатывает, когда условное поле становится видимым, и с помощью этого jquery я получаю правильный ответ в консоли:

jQuery( document ).on( 'cf.add', function(){
    console.log('cf.add triggered' );
});

И если я удалю условие, чтобы это поле отображалось при отображении страницы, я получаю правильный ответ в этом поле, который должен добавить '$':

$("#fld_3169487_4").on("blur", handleChange);
function handleChange() {
    var myValue = document.getElementById("fld_3169487_4").value;
	if (myValue.indexOf("$") != 0)
	{
		myValue = "$" + myValue;
	}
	document.getElementById("fld_3169487_4").value = myValue;
}

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

Я также пытался вызвать функцию handleChange () триггера cf.add, но у меня это тоже не сработало.

Когда вы говорите «сделать видимым», что именно вы для этого делаете? Вы динамически добавляете поле на страницу? Также не используйте событие blur, используйте change или input.

Brad 13.09.2018 21:27

Вложенные функции, которые вы, кажется, описываете, вполне допустимы в JavaScript (и на самом деле очень распространены). Кажется, ваша проблема в другом.

nmg49 13.09.2018 21:35
stackoverflow.com/questions/203198/…
epascarello 13.09.2018 21:39

@brad да, поле добавляется JS, извините, я не был более понятен изначально. Спасибо за информацию об изменениях или вводе, я их рассмотрю.

Lavert 14.09.2018 01:38

@Lavert Вам нужно привязать событие к родительскому элементу. Проблема в том, что вы не можете добавить прослушиватель событий к тому, чего не существует.

Brad 14.09.2018 01:43

@brad да, это то, что вызывает у меня проблемы. Если поле отображается вместе с остальной частью страницы, то есть оно не отображается / не скрывается условно на основе выбора, тогда оно работает нормально.

Lavert 14.09.2018 02:17
2
6
57
2

Ответы 2

Поскольку cf.add - это обычай, даже опубликованный в вашей форме, вы можете настроить подписку на событие для других элементов:

$("#fld_3169487_4").on('cf.add', function(event){
    if ($(this).val().indexOf("$") != 0)
    {
        $(this).val("$" +  $(this).val());
    }
});

Используя $(this), мы можем настроить таргетинг только на поле, к которому привязано событие. Кроме того, данные от издателя события могут быть переданы подписчикам через аргумент event.

После некоторой игры я понял это:

jQuery( document ).on( 'cf.add', function(){
var otherField = $("#fld_3169487_3");
otherField.focus();
var dollarValue;

$(otherField).on("blur", function() {
    dollarValue = otherField.val();
    if (dollarValue.indexOf("$") != 0) {
        dollarValue = "$ " + dollarValue;
    }
    $(otherField).val(dollarValue);
});

});

Другие вопросы по теме