@kiberchainik
начинающий найкрутейшЫй програмЁр

Почему не срабатывают динамические события?

html:
<input type="hidden" name="category_id" id="categoryIdInput" value="<?=$id?>" />
<input type="hidden" name="adv_id" id="advertIdInput" value="<?=$AdvertData['id']?>" />
<div id="typeCategoryBlock"></div>


js:
$(function() {
    $('#categoryWrap').on('change', '.subCategory:last', function () {
        typeCategoryBlock();
    });

    $('.subCategory:last').each(function () {
        typeCategoryBlock();
    });
});

function typeCategoryBlock () {
    var $this = $(this),
        subCategory_id = $('#categoryIdInput').val();

    if(subCategory_id == '0') {
        $('#fieldsAdvert').remove();
        $('#typeCategory').remove();
        return false;
    }

    $.ajax({
        url: 'index.php?route=ajax/TypesOfCategoryList',
        data: {
            id_cat: subCategory_id
        },
        type: 'POST',
        success: function(data) {
                $('#fieldsAdvert').remove();
                $('#typeCategory').remove();
                if (data != '') {
                    var $typeDiv = $('<div id="typeCategory"><?=$text_typeAdvert?></div>');
                    var $typeSelect = $('<select name="typeCategory" id="selecttypeCategory"/>');
                    $typeSelect.append('<option value="0">- <?=$text_select?> -</option>');

                    $.map(data, function(v) {
                        if(v.id_type == <?=$AdvertData['id_type']?>) $typeSelect.append('<option value="' + v.id_type + '" selected>' + v.name + '</option>')
                        else $typeSelect.append('<option value="' + v.id_type + '">' + v.name + '</option>')
                    });

                $typeDiv.append($typeSelect);
                $('#typeCategoryBlock').html($typeDiv);
            }
        }
    });
}

как видно этот код генерирует список select уже с выбранным option, эта обработка делается во вовремя загрузки страницы вопрос: как сделать чтоб сработал второй скрипт потому что был автоматически выбран option у select, на данный момент скрипт не запускается а срабатывает только если я вручную выбираю option. код скрипта который не срабатывает:
$(function() {
    $('#selecttypeCategory').change(function () {
        var $this = $(this),
            typeCategory_id = this.value;
        alert(typeCategory_id);
        if(typeCategory_id == '0') {
            $('#fieldsAdvert').remove();
            return false;
        }

        $.ajax({
            url: 'index.php?route=ajax/getFielsCategoryListEdit',
            data: {
                id_cat: $('#categoryIdInput').val(),
                id_adv: $('#advertIdInput').val()
            },
            type: 'POST',
            success: function(data) {
                $('#fieldsAdvert').remove();
                if (data != '') {
                    var $fieldsAdvert = $('<div id="fieldsAdvert"></div>');
                    $.map(data, function(v) {
                        switch (v.type) {
                            case 'text':
                                $('<input/>', {
                                    id:     v.id_style,
                                    class:  v.class_style,
                                    type:   v.type,
                                    name:   v.name,
                                    value:  v.adverts_fields_value,
                                    placeholder:    v.placeholder
                                }).appendTo($fieldsAdvert);
                            break;
                            case 'textarea':

                            break;
                            case 'password':
                                $('<input/>', {
                                    id:     v.id_style,
                                    class:  v.class_style,
                                    type:   'password',
                                    name:   v.name,
                                    value:  v.field_value,
                                    placeholder:    v.placeholder
                                }).appendTo($fieldsAdvert);
                            break;
                            case 'select':
                                var myselect = $('<select/>', { id: v.id_style, name: v.name});
                                var items = v.field_value.split(', ');
                                //Наполняем список
                                $('<option/>', {
                                    val:  '0',
                                    text: v.placeholder
                                }).appendTo(myselect);
                                $.each(items,function() {
                                    if (this == v.adverts_fields_value) {
                                        $('<option/>', {
                                            val:  this,
                                            text: this,
                                            selected: ''
                                        }).appendTo(myselect);
                                    } else {
                                        $('<option/>', {
                                            val:  this,
                                            text: this
                                        }).appendTo(myselect);
                                    }
                                });
                                $fieldsAdvert.append(myselect);
                            break;
                            case 'time':

                            break;
                            case 'date':

                            break;
                            case 'dateTime':

                            break;
                            case 'checkBox':
                                var mycheckBoxdiv = $('<div/>', {
                                    id:     'advertCheckBox'
                                }).appendTo($fieldsAdvert);
                                var items = v.field_value.split(', ');
                                $.each(items, function(i,item) {
                                    $('<label/>').append(
                                        $('<input/>', {
                                            type: 'checkbox',
                                            name: 'mycheckbox',
                                            val:    item
                                        })
                                    ).append(item).appendTo(myradiodiv);
                                });
                            break;
                            case 'radio':
                                var myradiodiv = $('<div/>', {
                                    id:     v.id_style
                                }).appendTo($fieldsAdvert);
                                var items = v.field_value.split(', ');
                                $.each(items, function(i,item) {
                                    if(item == v.adverts_fields_value) {
                                        $('<label/>').append(
                                            $('<input/>', {
                                                type: 'radio',
                                                name: 'myradio',
                                                val:    item,
                                                checked: ''
                                            })
                                       ).append(item).appendTo(myradiodiv);
                                    } else {
                                        $('<label/>').append(
                                            $('<input/>', {
                                                type: 'radio',
                                                name: 'myradio',
                                                val:    item,
                                                checked: ''
                                            })
                                       ).append(item).appendTo(myradiodiv);
                                    }
                                });
                            break;
                            case 'hidden':

                            break;
                            default:
                                return 'Type of field not found';
                        }
                    });

                    $('#formElementsBlock').html($fieldsAdvert);
                }
            }
        });
    }).trigger('change');
});
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 1
Jeer
@Jeer
уверенный пользователь
Доброго дня!
Мне тоже лень переваривать код.
Скорее всего, замените вызовы функции on() на функцию live(), тоже из jQuery. Она может работать с динамически созданными элементами, но работает чуть медленнее, но в вашем случае не будет разницы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы