jqgrid извлекает данные ячейки и манипулирует ими - PullRequest
0 голосов
/ 10 декабря 2010

Я хочу получить из события dataEvents значение, введенное пользователем.Я хочу разрешить только цифры от 0 до 24, и если пользователь вводит число, например, 4,5 (немецкое письмо), я хочу заменить «,» на «.».Таким образом, преобразуйте «4,5» в «4,5».

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

colModel:[
    {name:'sum',index:'sum', width:45, editable: true, sortable:false,
     editoptions: { dataEvents: [ 
                        {
                            type: 'keypress', // keydown
                            fn: function(e) {
                                // console.log('keypress');
                                var v=$(e.target).text();
                                alert(v); // v is empty.
                                //reset the target value, actually I want to replace
                                // enter code here a comma with a point
                                // only allow the numbers 0 - 24
                            }
                        }
                    ] 
                  }
    },
],

1 Ответ

7 голосов
/ 10 декабря 2010

Вы можете сделать замену ',' на '.' лучше внутри обработчика событий 'keyup' со следующим

$(this).val($(this).val().replace(/,/,'.'));

Таким образом, вы можете использовать следующие dataEvents

dataEvents: [
    {
        type: 'keyup',
        fn: function(e) {
            var oldVal = $(this).val();
            var newVal = oldVal.replace(/,/,'.');
            if (oldVal !== newVal) {
                $(this).val(newVal);
            }
        }
    },
    {
        type: 'keypress',
        fn: function(e) {
            var key = e.charCode || e.keyCode; // to support all browsers
            if((key < 48 || key > 57) &&   // if non digit
               key !== 46 && key !== 44 && key !== 8 && // and not . or , or backspace
               key !== 37 && key !== 39) { // arrow left and arrow right
                return false;
            }
        }
    }
]

На в следующей демонстрации вы можете увидеть результаты вживую. Единственный недостаток, который я вижу в этом примере, заключается в следующем: если вы попытаетесь ввести запятую в середине текста , позиция курсора (каретка) изменится на конец ввода после замены. запятая, чтобы указать. Вероятно, это не настоящая проблема в вашем случае. Если вы хотите сохранить позицию курсора, вы, вероятно, должны сделать это document.selection используется для IE или .selectionStart и .selectionEnd для Firefox.

ОБНОВЛЕНО : я исправил проблему с использованием e.keyCode внутри события keypress в Firefox. Я следую информации из здесь и использую сейчас e.charCode || e.keyCode вместо e.keyCode. Приведенный выше код и демо-версия исправлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...