Как вызвать новый X-Editable для открытия функции успеха настоящего?

70
7

Я использую Bootstrap X-editable, чтобы позволить людям делать встроенные изменения своего профиля. Одна из вещей, которую пользователь может редактировать, влияет на другое редактируемое. Если для изменяемого формата A (год) установлен текущий год, пользователь обязан принять решение в редактируемом B (определенная ставка налога).

Таким образом, редактируемые варианты для редактируемого year следующие:

$('#year').editable({
pk: 1,
success: function(response, newValue){
if (newValue == 2014){
$('#tax_rate').trigger('click');
} else {
$('#tax_rate').html(2);
}
}
});

ПРИМЕР FIDDLE ЗДЕСЬ

Это ведет себя отлично, за исключением 2014 года, в котором оно действительно #tax_rate правильное значение для внутреннего #tax_rate, а затем действительно щелкает/открывает #tax_rate, но каким-то образом щелчок препятствует правильному отображению нового года в #year. Если я обновляю страницу, год снова отобразится правильно, но это просто, когда я пытаюсь запустить другое редактируемое, что оно не отображает год правильно после его сохранения. Просто попробуйте открыть скрипку и изменить год до 2014 года, чтобы понять, что я имею в виду.

Так кто-нибудь знает, как я могу обновить новый год в DOM, а также щелкнуть/открыть tax_rate редактирования? Все советы приветствуются!

спросил(а) 2014-11-17T15:46:00+03:00 5 лет, 10 месяцев назад
1
Решение
89

Я советую вам взаимодействовать с асинхронным интерфейсом:

Как это:

$('#year').editable({
pk: 1,
success: function(response, newValue){
if (newValue == 2014){
setTimeout(function(){
$('#tax_rate').trigger('click');
}, 0);
} else {
$('#tax_rate').html(2);
}
}
});

Он должен работать правильно, я думаю

Добавить:
Также вы можете вызвать click события vanillaJS рамки использования.
Я думаю, что $.trigger вызывает некоторые ошибки обновления интерфейса.
Это просто:

document.getElementById('tax_rate')
.dispatchEvent(new Event('click'));

ответил(а) 2014-11-19T16:18:00+03:00 5 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема