Событие изменения не вызвано на элементе ввода
В следующем представлении марионеток содержится таблица, которую можно редактировать, дважды щелкнув ячейку. Для этого я использовал slickgrid. В chrome он работает нормально, но в IE9 это представление никогда не замечает события изменения ("изменение. Input.slick-cell.l1"). Это если вы дважды щелкнете по ячейке, чтобы внести изменения, затем нажмите кнопку Сохранить. В Chrome я могу дважды щелкнуть ячейку, внести изменения и нажать клавишу ввода или щелкнуть в любом месте за пределами ячейки, и изменение произойдет.
DataContentView = Marionette.ItemView.extend({
className: "ui-widget-content grid-container",
events: {
"change .slick-cell.l0 input": "changeDataKey",
"change .slick-cell.l1 input": "changeDataValue",
"click .ui-icon-trash": "removeData"
},
changeDataValue: function(event){
var target = $(event.target),
key = target.closest(".slick-row").find(".l0").text(),
value = target.val();
this.model.set(key, value, {silent:true});
}
}
2 ответа
Использование различных событий действительно работает для IE9. Я нашел то, что я думаю, может быть, лучшее решение. Сначала я использовал событие keyup для вызова функции changeDataValue. Это работало хорошо, за исключением случаев, когда была нажата клавиша ввода или клавиша выхода. Slickgrid, кажется, останавливает распространение этих ключевых событий. Чтобы обойти эту скользкую сетку, есть свой набор событий. Поэтому я нашел правильное событие onCellChange
вот код, который я использовал:
this.grid = new Slick.Grid();
this.grid.onCellChange.subscribe(function(e,args){
if(args.cell === 0){//cell in first column changed
this.changeDataKey(args.item.key, args.item.val);
}
else if(args.cell === 1){
this.changeDataValue(args.item.key, args.item.val);
}
});
"input .slick-cell.l0 input": "changeDataKey",
// and similar to others
попробуйте связать событие 'input', если ваша версия IE>=9 или событие 'propertychange'. Это может помочь.