Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   ComboBox и Alert (http://www.flasher.ru/forum/showthread.php?t=91309)

JaLav 30.01.2007 01:24

ComboBox и Alert
 
Хочу, чтоб, когда выбираю первый элемент Комбобокса, появлялось окошко Алерт с кнопкой ОК.
Почему выдает ошибку типа "безконечная рекурсия"?
Код:

import mx.controls.Alert;
        var cbListener:Object = new Object();
        combo.addItem ({label:"none", data:0});
        combo.addItem ({label:"a", data:1});
        cbListener.change = function(event_obj:Object)
        {
        var ob=event_obj.target.selectedItem.data;
                if(ob==0)
                {
                Alert.show("...must be >0","Warning", Alert.OK);
                }
        };
                combo.addEventListener("change", cbListener);


CorC 30.01.2007 10:27

не поверите, вставил, все работает...
и ошибок тут не нахожу...

Nirth 30.01.2007 10:28

чертовщина какая то, если вызвать Alert из обработчика событий получается глюк.

Код:

import mx.controls.Alert;
import mx.controls.ComboBox;

var interval:Number;

function onComboBoxChange(event:Object):Void
{
        var target:ComboBox = ComboBox(event.target);
       
        if(!Number(target.selectedItem.data))
        {
                interval = setInterval(showWarning, 1);
        }
}

function showWarning():Void
{
        Alert.show("Data is not big enough", "Warning");
        clearInterval(interval);
}

comboBox.addItem({label:"Hello", data:0});
comboBox.addItem({label:"World", data:1});
comboBox.addEventListener("change", onComboBoxChange);

Не очень опрятно, но работает...

Nirth 30.01.2007 10:31

Corc какая версия флэша у тебя?

У меня восьмерка, компилю под восьмерку.

CorC 30.01.2007 10:35

а ну я пробовал под МХ запустить,
восьмерка есь но щаз МХ открыт :)

да в 8 мне вот такую загогулину выдало:
"Failed to create a new alert, probably because there is no Alert in the Library"
хотя он там есть :)

Nirth 30.01.2007 10:37

наверное в восьмерке они компоненты решили пропатчить, и добавили багов.

etc 30.01.2007 11:36

Почему бы не залезть внутрь компонентов и посмотреть?

Nirth 30.01.2007 12:14

Цитата:

Почему бы не залезть внутрь компонентов и посмотреть?
Типа проанализировать код, локализовать ошибку, написатьзаплатку?

только когда мне заплатят=)

etc 30.01.2007 13:44

Не, зачем, просто проанализировать и узнать, откуда она. А секрет продавать :D

Nirth 30.01.2007 14:15

Кстати глюк присутствует только в ComboBox.

я попробывал Button, List они работают нормально.

Ошибка должно быть в этом методе.

Код:

//mx.controls.ComboBox
function _changeHandler(obj) : Void
        {
                var o = this.owner; // 'this' is the dropdown; 'o' is the combobox
                var prevValue = o.selectedIndex;
                obj.target = o;

                if (this == this.owner.text_mc)
                {
                        o.selectedIndex = undefined;
                        o.dispatchChangeEvent(obj,-1,-2); // Force a change event to be dispatched
                }
                else
                {
                        // This assignment will also assign the label to the text field. See setSelectedIndex().
                        o.selectedIndex = selectedIndex;
                        // If this was generated by the dropdown as a result of a keystroke, it is
                        // likely a Page-Up or Page-Down, or Arrow-Up or Arrow-Down. If the selection
                        // changes due to a keystroke, we leave the dropdown displayed. If it changes
                        // as a result of a mouse selection, we close the dropdown.
                        if (!o._showingDropdown)
                        {
                                o.dispatchChangeEvent(obj,prevValue, o.selectedIndex);
                        } else if (!o.bInKeyDown) {
                                o.displayDropdown(false);
                                //o.dispatchChangeEvent(obj,-1, o.selectedIndex);
                               
                        }
                }
                //o.dispatchEvent(obj);
        }

или тут

Код:

function dispatchChangeEvent(obj,prevValue,newValue)
        {
                var eventObj:Object;
                //trace(obj.type + "  "  + prevValue + "    " + newValue);
                if (prevValue != newValue)
                {
                        if (obj != undefined && obj.type == "change")
                        {
                                eventObj = obj;
                        }
                        else
                        {
                                eventObj = {type:"change"};
                        }
                       
                        //eventObj.prevValue = prevValue;
                        //eventObj.newValue = newValue;
                       
                        dispatchEvent(eventObj);
                }
               
        }

копатся дальше пока лень.


Часовой пояс GMT +4, время: 00:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.