Событие change
требует следующих трех вещей:
- Элемент усиления фокуса
- Изменение значения
- Размытие фокуса от элемента
Если вы изменяете значение ввода программно, то вы должны вручную инициировать событие change
с помощью jQuery .trigger('change')
или ярлыка .change()
.
В идеале вы должны изменить первую функцию, чтобы вызвать изменение:
$(document).ready(function () {
$("input:radio").bind('click', function () {
$("#image")
.val($(this).val())
.trigger('change');
});
});
$(document).ready(function () {
$('#image').bind('change', function () {
var src = $(this).val();
$('#imagePreview').html(src ? '<img src="' + src + '">' : '');
});
});
Однако, согласно тексту вашего вопроса, вы не можете изменить первую функцию, как я предложил. В таком случае, IMO, для вас нет подходящего варианта. Вы можете установить временной интервал для опроса ввода на его значение и инициировать событие change
, если вы заметите, что оно отличается от последней проверки, но это просто уродливо. В любом случае, вам нужно вызвать событие изменения.
Гадкий:
//LEAVE FIRST FUNCTION ALONE
$(document).ready(function () {
var $imageInput = $("#image"),
$imagePreview = $('#imagePreview'),
lastVal;
$imageInput.bind('change', function () {
var src = $(this).val();
$imagePreview.html(src ? '<img src="' + src + '">' : '');
});
lastVal = $imageInput.val();
setInterval(function () {
var currentVal = $imageInput.val();
if (currentVal !== lastVal) {
$imageInput.trigger('change');
lastVal = currentVal;
}
}, 500);
});