Множественный выбор типа для плагина Jeditable - In Place Editor - PullRequest
1 голос
/ 20 января 2010

Я использую jeditable в своем проекте, где я динамически обновляю много разных типов контента: текст, текстовое поле и выбираю.

Мне нужен новый тип для удовлетворения одной из моих потребностей: тип с множественным выбором, который можно назвать «selectmulti».

При редактировании поля, набранного «selectmulti», появляется список выбора, который позволяет пользователям выбирать несколько вариантов. Сохранение вернет массив, а update.php сохранит этот массив в моей БД.

Ex:

<div class='border'>
  <span class='title'>Language: </span>
  <span class='editableLang' id='contact_language'>
    ".$row['contact_language']."
  </span>
</div>

И функция Javascript:

    $('.editableLang').editable('update.php', { 
        data        : '<?php print json_encode($tab_lang); ?>',
        id          : 'cellid',
        name        : 'cellvalue',
        event       : 'dblclick',
        tooltip     : 'Double click to edit...',
        submitdata  : {id: "<?php echo $id_contact; ?>"},
        type        : 'selectmulti',
        style       : 'display: inline',
        submit      : 'Save',
        cancel      : 'Cancel'
     });

Я просто не могу понять, как получить разные значения в массиве (в моем случае 'cellvalue' будет массив) и сохранить его в БД.

Любая помощь или совет будет принята с благодарностью!

Приветствия

Ответы [ 4 ]

3 голосов
/ 23 ноября 2012

только одна поправка. Это работает, но - очевидно - вы должны использовать «multiselect» в качестве значения параметра «type», когда вы вызываете editable, а не «select»:

$('.editable').editable('http://www.example.com/save.php', { 
 data   : " {'E':'Letter E','F':'Letter F','G':'Letter G', 'selected':'F'}",
 type   : 'multiselect',
 submit : 'OK'
});
2 голосов
/ 16 февраля 2012

Это сработало для меня!

$.editable.addInputType("multiselect", {
    element: function (settings, original) {
        var select = $('<select multiple="multiple" />');

        if (settings.width != 'none') { select.width(settings.width); }
        if (settings.size) { select.attr('size', settings.size); }

        $(this).append(select);
        return (select);
    },
    content: function (data, settings, original) {
        /* If it is string assume it is json. */
        if (String == data.constructor) {
            eval('var json = ' + data);
        } else {
            /* Otherwise assume it is a hash already. */
            var json = data;
        }
        for (var key in json) {
            if (!json.hasOwnProperty(key)) {
                continue;
            }
            if ('selected' == key) {
                continue;
            }
            var option = $('<option />').val(key).append(json[key]);
            $('select', this).append(option);
        }

        if ($(this).val() == json['selected'] ||
                            $(this).html() == $.trim(original.revert)) {
            $(this).attr('selected', 'selected');
        }

        /* Loop option again to set selected. IE needed this... */
        $('select', this).children().each(function () {
            if (json.selected) {
                var option = $(this);
                $.each(json.selected, function (index, value) {
                    if (option.val() == value) {
                        option.attr('selected', 'selected');
                    }
                });
            } else {
                if (original.revert.indexOf($(this).html()) != -1)
                    $(this).attr('selected', 'selected');
            }
        });
    }
});

$('.editable').editable('http://www.example.com/save.php', { 
 data   : " {'E':'Letter E','F':'Letter F','G':'Letter G', 'selected':'F'}",
 type   : 'select',
 submit : 'OK'
});

http://pastebin.com/tZwHMHQD

2 голосов
/ 15 сентября 2010

Если кому-то интересно, мое решение на jsbin: http://jsbin.com/ixuye4/edit

0 голосов
/ 13 февраля 2013

Если кто-то ищет быстрое и грязное решение:

$.editable.addInputType('multi', {
    element : function(settings, original) {
        var select = $('<select multiple="multiple" />');

        if (settings.width != 'none') { select.width(settings.width); }
        if (settings.size) { select.attr('size', settings.size); }

        $(this).append(select);
        return (select);
    },
    content: function (data, settings, original) {

        /* If it is string assume it is json. */
        if (String == data.constructor) {
            eval('var json = ' + data);
        } else {
            /* Otherwise assume it is a hash already. */
            var json = data;
        }

        for (var key in json) {

            if (!json.hasOwnProperty(key)) {
                continue;
            }
            if ('selected' == key) {
                continue;
            }
            var option = $('<option />').val(key).append(json[key]);
            $('select', this).append(option);

        }

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