2011-02-23 4 views
0

Richfaces 3.3.3のプロトタイプのバージョンに問題があります。プロトタイプjsを使用したカスタムトリガイベントが現在の貼り付け値を見つけられない

Richfacesをアップグレードする前に、以下にリストされているコードはうまくいきました。

Event.observe('#{formName}:suggest', 'paste', this.handleMousePaste.bind(this)); 


     // Trigger keyup event when user copy and pastes data into field. (Using mouse to paste will not work without this fix) 
     function handleMousePaste(event) { 

      // Get element object event occured on 
      var element = Event.element(event); 

      // Trigger a keyup event which will send ajax request to server (Event already attached in Richfaces code) 
      triggerEvent(element,'keyup'); 

     } 

     // Create custom function that will allow us trigger an event anywhere in our javascript code 
     function triggerEvent(element,event){ 
      if (document.createEventObject) 
      { 
       // dispatch for IE 
       var evt = document.createEventObject(); 

       return element.fireEvent('on'+event,evt) 
      } 
      else 
      { 
       // dispatch for firefox + others 
       var evt = document.createEvent("HTMLEvents"); 
       evt.initEvent(event, true, true); // event type,bubbling,cancelable 

       return !element.dispatchEvent(evt); 
      } 
     } 


何やっている: はhandleMousePasteは()私のページ上のテキスト入力フィールドに添付されてkeyUpイベントを発火される(経由RichFacesのa4j:suppoerタグ)

<h:inputText value="#{myBean.typed}" id="suggest" styleClass="dataTableFilterField"> 
       <a4j:support event="onkeyup" reRender="Table1,tableScroller" ajaxSingle="true" requestDelay="200" ignoreDupResponses="true" eventsQueue="filterQueue"/>  
      </h:inputText> 


何らかの理由で、入力フィールド 'suggest'に貼り付けた値が取得されません。 2回目に貼り付けた場合、貼り付けた最初の値が表示されます。例: 「Tom」に貼り付けると、ajaxリクエストが送信されますが、候補フィールドは空白です。 'Tom2'に貼り付けると、提案された値は 'Tom'(このフィールドには 'TomTom2'が含まれています)というメッセージが表示されます。

私が言ったように、これはRichfacesをアップグレードする前に正常に動作していたので、Prototypeの新しいバージョンは信じています。

すべてのアイデア?

答えて

0

これを修正することができます。似たような問題を抱えている人のためのアタッチ

// Attach js handlers when page content is fully loaded (Prototype.js framework) 
       Event.observe(window, 'load', function() { 

        // Only attach event listener if the element exists on page 
        if ($('#{formName}:suggest')) {     
         Event.observe('#{formName}:suggest', 'paste', this.handleMousePaste.bind(this)); 
        } 
       }); 


       // Trigger keyup event when user copies and pastes data into field. (Using mouse to paste will not work without this fix) 
       function handleMousePaste(event) { 

        // Need to put a tiny delay in so the element has time to get the pasted in content. 
        setTimeout(function() {this.triggerEvent($('#{formName}:suggest'),'keyup')}, 10); 
       } 

       // Create custom function that will allow us trigger an event anywhere in our javascript code 
       function triggerEvent(element,event){ 
        if (document.createEventObject) 
        { 
         // dispatch for IE 
         var evt = document.createEventObject(); 

         return element.fireEvent('on'+event,evt); 
        } 
        else 
        { 
         // dispatch for firefox + others 
         var evt = document.createEvent("HTMLEvents"); 
         evt.initEvent(event, true, true); // event type,bubbling,cancelable 

         return !element.dispatchEvent(evt); 
        } 
       } 
関連する問題