Общая функция JQuery? - PullRequest
       6

Общая функция JQuery?

0 голосов
/ 23 сентября 2011

Я использую Jeditable для редактирования десятков полей, таких как имя, фамилия, день рождения и т. Д.

Моя проблема в том, что я тону в деталях: мне по-прежнему приходится создавать новый селектор, например $('#edit_first_name').editable или $('#edit_birthday').editable, чтобы сделать поле редактируемым, а также создавать набор команд SQL, специфичных для каждого поля, для вставьте их, как только они будут отредактированы.

У меня вопрос: Есть ли способ, которым я могу создать что-то общее или OO в JQuery, чтобы мне не пришлось бесконечно создавать код, который по сути делает то же самое?

Полагаю, я могу создать некоторую "универсальную" функцию, которая будет создавать $('#edit_someField').editable на лету, передавая массив JSON, который был создан путем выполнения SELECT для всех имен полей, которые меня интересуют. Я думаю, это точно что делают плагины JQuery.

Любое руководство о том, как я могу это сделать, будет высоко ценится.

EDIT

Одно из решений, которое я нашел, состоит в том, чтобы поместить таблицу, имя столбца и идентификатор в значение идентификатора того, что я хочу редактировать. Например, если я хочу отредактировать first_name id = 6 в таблице Person, то в id я добавлю <span class="editable" id="Person:first_name:6">myFirstName</span>. Когда я отправляю идентификатор в мой файл save.php, я использую preg_split, чтобы вставить свои данные в таблицу.

Ответы [ 3 ]

1 голос
/ 23 сентября 2011

Отметьте все ваши редактируемые поля ввода с помощью класса «редактируемые».(Измените для соответствия.)

$('.editable').each(function() {
  $(this).editable('mysaveurl.php');
});

Это все, что вам нужно для основных функций.Очевидные улучшения могут быть сделаны, в зависимости от того, что еще вам нужно.Например, если вы используете всплывающие подсказки, вставьте их в атрибут title в HTML и используйте их при вызове editable ().

Фактический PHP / Ruby / любой другой код на сервере просто собираетсяпосмотрите на входящий параметр id и используйте его для сохранения в соответствующем поле в базе данных.

0 голосов
/ 23 сентября 2011

Способ присвоения некоторого общего кода группе объектов с помощью jQuery состоит в том, чтобы либо присвоить всем объектам один и тот же класс, так что вы можете просто сделать это:

$(".myEditableFields").editable("enable");

Это вызовет редактируемый метод надстройки для всех объектов на вашей странице с class="myEditableFields".

Если у вас просто список идентификаторов, вы можете просто поместить их все в один селектор, как этот, и каждый из них будет вызван для редактируемого метода jQuery:

$("#edit_first_name, #edit_birthday, #edit_last_name, #edit_address").editable("enable");

Иногда простой способ создать выборку, которая просто идентифицирует все редактируемые поля в родительском элементе div:

$("#editForm input").editable("enable");

Это автоматически получит все входные теги внутри контейнера div с помощью id=editForm.

Конечно, вы можете собирать общий код в свою собственную функцию в традиционном шаблоне процедурного программирования и просто вызывать его при необходимости следующим образом:

function initEditables(sel) {
    $(sel).editable("enable");
    // any other initialization code you want here or event handlers you want to assign
}

И затем просто называйте это так, как нужно:

initEditables("#edit_first_name");

Чтобы помочь в дальнейшем, нам нужно больше узнать о том, что вы пытаетесь сделать в своем коде и как выглядит ваш HTML.

0 голосов
/ 23 сентября 2011

Просто используйте класс, чтобы сделать их все редактируемыми, и используя их идентификатор (или атрибут, который вы прикрепили к тегу), вы можете указать поле, которое вы обновляете. Затем просто передайте поле и значение в вашу БД.

я не знаю, какой плагин вы используете но при условии, что в нем есть какая-то обработка событий ...
что-то вроде этого может быть?

$(".editable").editable({
      complete : function() {
            var _what = $(this).attr("id");
            var _with = $(this).val();
            $.post("yourPostPage.php",{what:_what, where:_where});
       }
});

Не зная больше о вашем окружении, я не смогу помочь дальше.

...