Пользовательская кнопка пользовательского интерфейса 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 публикует собственное событие щелчка, на которое вы подписываетесь в экземпляре кнопки YUI, а не с помощью YAHOO.util.Event.addListener. Это подробно описано на целевой странице кнопки YUI: http://developer.yahoo.com/yui/button/#handlingevents.

person Community    schedule 04.01.2010

Ваша проблема - 3-й аргумент. Это должно быть ссылкой на функцию. Что происходит в вашем коде, так это то, что аргумент 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-путь идет сюда' и 'Ключ страницы идет сюда' во время клика. Для этого используйте необязательный четвертый аргумент 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