2009-08-19 59 views
0

我创建了一个按钮,点击后,就会激活备份功能。
我的问题,我已经点击这个按钮之前备份启动。
如何解决这个问题?任何想法 ?YUI事件实用问题

这里是我的代码(片段):

(按钮):

   var oSaveCuratedQuery = new YAHOO.widget.Button({ 
       type: "button", 
       label: "Save Query", 
       id: "updateCuratedQuery", 
       name: "updateCuratedQuery", 
       value: "updateCuratedQueryValue", 
       container: idReq }); 

YAHOO.util.Event.addListener("updateCuratedQuery-button", "click", saveCuratedQuery(idReq, contentCurValue)); 

(备份功能):

function saveCuratedQuery (geneId,curatedText) { 

      var handleSuccessGeneQueries = function(o){ 
       Dom.get('progress').innerHTML = "Data Saved..."; 
      } 

      var handleFailureGeneQueries = function(o){ 
       alert("Save failed...") 
      } 

      var callbackGeneQueries = 
      { 
       success:handleSuccessGeneQueries, 
       failure: handleFailureGeneQueries 
      }; 


    var sUrlUpdate = "save.html?"; 
    var postData = 'key=saveCuratedQuery&value=gene_id==' +geneId+ '--cq==' +curatedText; 

var request = YAHOO.util.Connect.asyncRequest('POST', sUrlUpdate, callbackGeneQueries, postData); 

     } 

我也尝试: oSaveCuratedQuery.on(“点击“,saveCuratedQuery(idReq,contentCurValue));
但同样的问题!
之前,我点击“保存”按钮,备份完成。

谢谢你的帮助。

回答

1

的addListener的第三个参数应该是当事件发生时要运行的功能。

你传递saveCuratedQuery的返回值代替。

var callbackSaveCuratedQuery = function (idReq, contentCurValue) { 
    return function callbackSaveCuratedQuery() { 
     saveCuratedQuery(idReq, contentCurValue); 
    }; 
}(idReq, contentCurValue); // Use an anonymous closure function 
          // to ensure that these vars 
          // do not change before the click 
          // event fires. 

YAHOO.util.Event.addListener("updateCuratedQuery-button", 
          "click", 
          callbackSaveCuratedQuery 
          ); 

https://developer.mozilla.org/en/A_re-introduction_to_JavaScript#Closures如果您需要了解封。

+0

大卫的钱在这里。你正在调用不指向它的功能... – BigBlondeViking 2009-08-19 15:07:06

+0

非常感谢,我有一个现在可用的备份按钮! 另外,感谢您的链接(本页面上的许多有趣的事情)。 – 2009-08-19 15:27:54