Персонализиран бутон на потребителския интерфейс на Yahoo

Имам YUI бутон, дефиниран чрез HTML маркиране. Успях да го заредя и "одрая" както трябва.

Проблемът е персонализирано събитие за кликване. Опитах редица подходи, всички от които свързват персонализираната функция със събитието „щракване“, но без значение по какъв начин го правя, ВИНАГИ се задейства при зареждане на страницата и след това не се задейства при щракване. Изглежда не мога да го накарам да "изчака" потребител да щракне. Просто стреля като девствена на първата си среща.

Кодът по-долу....

<script type="text/javascript">
    YAHOO.util.Event.onContentReady("submitbutton", onButtonReadySubmit);
    YAHOO.util.Event.onContentReady("editbutton",onButtonReadyEdit);

    var myTabs = new YAHOO.widget.TabView("demo");
    function editDoc(sBaseRef, sUNID) {
        var sNewURL = sBaseRef + "/0/" + sUNID + "?EditDocument";
        alert("Going to : " + sNewURL);
     window.location.href=sNewURL;
    }
    function onButtonReadySubmit() {
 var oSubmitButton = new YAHOO.widget.Button("submitbutton");
    }
    function onButtonReadyEdit() {
        var oEditButton = new YAHOO.widget.Button("editbutton");
        YAHOO.util.Event.addListener("editbutton", 'click', editDoc('a URL path goes here' , 'A PageKey goes here'));
    }


person giuliocc    schedule 27.12.2009    source източник


Отговори (2)


YUI Button публикува свое собствено събитие за кликване, за което се абонирате, в екземпляра на YUI Button, вместо да използва YAHOO.util.Event.addListener. Това е описано подробно на целевата страница на бутона YUI: http://developer.yahoo.com/yui/button/#handlingevents.

person Community    schedule 04.01.2010

Вашият проблем е третият аргумент. Това трябва да е препратка към функцията. Това, което се случва във вашия код е, че аргументът 3 е функция, която се извиква при създаването на слушателя и не връща нищо.

Ти имаш:

YAHOO.util.Event.addListener("editbutton", 'click', editDoc(
    'a URL path goes here', 
    'A PageKey goes here'
));

Просто това, което искате е:

YAHOO.util.Event.addListener("editbutton", 'click', editDoc);

Въпреки това, вие също искате да предадете „URL пътеката отива тук“ и „A PageKey отива тук“ към функцията по време на щракване. За да направите това, използвайте незадължителния четвърти аргумент за addListener() - обект, който да прехвърлите на функцията.

function editDoc (ev, oArgs) {
   var sBaseRef = oArgs.url,
       sUNID    = oArgs.key;

   /* code here */

}

YAHOO.util.Event.addListener("editbutton", 'click', editDoc, { 
    url: 'a URL path goes here',
    key: 'A PageKey goes here'
});

Вижте http://developer.yahoo.com/yui/docs/YAHOO.util.Event.html#method_addListener за повече.

Както споменава Тод, можете също да направите това като част от създаването на бутона YUI - но се прилагат същите проблеми с препратките към функция срещу функция.

person Gavin Brock    schedule 08.01.2010