jEditable: отображать текст опции (а не значение) после отправки - PullRequest
3 голосов
/ 03 июля 2011

Я использую jEditable в списке выбора.Работает прекрасно, за исключением следующего вопроса.jEditable отображает все, что сервер отправляет после отправки.Это прекрасно работает для текстовых полей и т. Д., Где вы можете просто отправить отправленное значение обратно с сервера.

Однако в списках выбора это не имеет смысла, поскольку отправленное значение - это просто идентификатор элемента option.Если я отправлю это обратно, то мой текст изменится на Id, а не на дружественный текст, который был там раньше.

Как я могу отключить это поведение?Я не хочу снова получать текстовое значение, используя отправленный идентификатор из БД, просто чтобы отправить его обратно для отображения.Должен быть способ сохранить текст опции, а затем jEditable поместит его обратно в метку после отправки.Помощь

Ответы [ 6 ]

6 голосов
/ 22 октября 2012

Просто добавьте обратный вызов в редактируемом объекте конфигурации с помощью:

callback: function (value, settings) { 
      $(this).html(settings.data[value]);
 }
3 голосов
/ 22 августа 2011

Почти нет.У меня были две проблемы с кодом Уильяма Ниу.Во-первых, вы не можете получить доступ к переменным данным, используйте вместо этого settings.data.Во-вторых, переменные данные - это не массив, а строка, поэтому data [value] не будет работать.Вот мой код, попробуйте это.

$(".editable").editable("yoursave.php", { 
    type   : 'select',
    data   : '{'E':'Letter E','F':'Letter F','G':'Letter G'}',
    callback: function(value, settings) {
        $(this).html(jQuery.parseJSON(settings.data)[value]);
    }
});
1 голос
/ 03 августа 2012
return $(this).find('option:selected').text();

у меня в функции обратного вызова работало:)

1 голос
/ 10 апреля 2012

Функция обратного вызова в коде Хаммерса верна, но у меня были проблемы с анализом данных:

"JSON.parse: expected property name or '}' "

Данные должны соответствовать JSON, означает: данные: '{"E":"Letter E","F":"Letter F","G":"Letter G"}',

Таким образом, правильный код похож на

$(".editable").editable("yoursave.php", { 
    type   : 'select',
    data : '{"E":"Letter E","F":"Letter F","G":"Letter G"}',
    callback: function(value, settings) {
        $(this).html(jQuery.parseJSON(settings.data)[value]);
    }
});

Если у вас есть простой массив вместо ассоциативного массива, вы можете использовать обратный вызов Niu.

1 голос
/ 14 августа 2011

jEditable предоставляет различные функции обратного вызова для манипулирования данными. Это может зависеть от того, как вы получаете данные для заполнения select. Например, если данные являются постоянной картой, вы можете легко найти значение по возвращенному ключу:

var data = {'E':'Letter E','F':'Letter F','G':'Letter G'};

$('#editable').editable('some url', {
    type: 'select',
    data: data,
    callback: function(value, settings) {
        $(this).html(data[value]);
    },
    submit: 'ok'
});

Пример: http://jsfiddle.net/william/mT4XV/

0 голосов
/ 14 апреля 2012

У меня была похожая проблема.Я использую post для работы и loadurl.

Путем изменения var str = settings.target.apply(self, [input.val(), settings]); на var str = settings.target.apply(self, [input.val(), settings, input]); я получил контроль над элементом select в моей целевой функции

...