Страница 1 из 1

Помогите оптимизировать код!

Добавлено: 27 апр 2013, 18:21
jimmyjonezz
Написал обработчик объекта SELECT (всплывающий список), позволяющий вставлять нужный тег при выборе определенной строки. Код рабочий, но мне кажется, что можно "ужать" код. Мой код обрабатывает три select, имеющих разные id.

 Свернуть/Развернуть спойлер
function addSelect(){
if ($('#myTable').length ) {
var tagName = $('#myTable :selected').val();
var startTag = '[' + tagName + ']';
var endTag = '[/' + tagName + ']';
if (tagName != '') {
addText(startTag, endTag);
} else {
addText('', '');
}
$('#myTable').val('');
}
if ($('#myH').length ) {
var tagName = $('#myH :selected').val();
var startTag = '[' + tagName + ']';
var endTag = '[/' + tagName + ']';
if (tagName != '') {
addText(startTag, endTag);
} else {
addText('', '');
}
$('#myH').val('');
}
if ($('#mySelect').length ) {
var tagName = $('#mySelect :selected').val();
var startTag = '[' + tagName + ']';
var endTag = '[/' + tagName + ']';
if (tagName != '') {
addText(startTag, endTag);
} else {
addText('', '');
}
$('#mySelect').val('');
}
}

Re: Помогите оптимизировать код!

Добавлено: 27 апр 2013, 23:01
Cuprum
jimmyjonezz
Давайте пример целиком (лучше с демонстрацией), чтобы глянуть, что и как должно работать. Подумаем...

Re: Помогите оптимизировать код!

Добавлено: 28 апр 2013, 06:16
jimmyjonezz
Проблема решена. Если кому нужно привожу рабочий вариант:
Пусть у нас есть несколько списков, примерно такого вида:

Код: Выбрать все

<select name="table" id="myTable" onChange="AddTag('myTable')">
   <option value="" class="title">Таблица:</option>
   <option value="table">Вставить таблицу</option>
   <option value="tr">Вставить строку</option>
   <option value="td">Вставить ячейку</option>
</select>


Тогда на событие onchange будет срабатывать следующий код : addTag(). Кстати, функцию addText() легко откопать в плагине editor_dumb.

Код: Выбрать все

function AddTag(ID){
if (typeof ID == "string"){
        if ($('#'+ID).length ) {
            var tagName = $('#'+ID+' :selected').val();
            if (tagName != '') {
                var startTag = '[' + tagName + ']';
                var endTag = '[/' + tagName + ']';
                addText(startTag, endTag);
            } else {
                addText('', '');
            }
            $('#'+ID).val('');
        }
    } else {
        alert(typeof ID + " NOT SUPPORTED");
    }
   }


Варианты по улучшению принимаются. Рабочий вариант здесь: viewtopic.php?f=6&t=5925

Re: Помогите оптимизировать код!

Добавлено: 29 апр 2013, 16:13
Cuprum
Не работает вставка из выпадающих списков для выделенного текста...

Re: Помогите оптимизировать код!

Добавлено: 29 апр 2013, 16:47
jimmyjonezz
Cuprum писал(а):Не работает вставка из выпадающих списков для выделенного текста...

У меня все работает отлично... Правда забыл сразу указать, что параметр нужно отдавать в одинарных кавычках: onChange="AddTag('myTable')"

Re: Помогите оптимизировать код!

Добавлено: 29 апр 2013, 17:03
Cuprum
Мой вариант.
Убрать обработчик из HTML (onChange=...) и вставить в editor_zero.js такой код:

Код: Выбрать все

$(function () {
   $('#myTable, #myH, #mySelect').change(function () {
      var tagName = $(this).val(),
         startTag = '[' + tagName + ']',
         endTag = '[/' + tagName + ']';

      if (tagName) {
         addText(startTag, endTag);
      }
   });
});

Re: Помогите оптимизировать код!

Добавлено: 29 апр 2013, 17:35
jimmyjonezz
Да, лучше... но после addtext все же следует добавить $(this).val('') - вдруг пользователь захочет вставить несколько одинаковых тегов из списка.

Re: Помогите оптимизировать код!

Добавлено: 29 апр 2013, 17:50
Cuprum
Согласен.