[ 
https://issues.jboss.org/browse/RF-13305?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukáš Fryč updated RF-13305:
----------------------------

     Original Estimate: 1 hour
    Remaining Estimate: 1 hour

    
> Autocomplete: i must press button twice for popup window
> --------------------------------------------------------
>
>                 Key: RF-13305
>                 URL: https://issues.jboss.org/browse/RF-13305
>             Project: RichFaces
>          Issue Type: Feature Request
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 4.3.4
>            Reporter: alexey plotnikov
>            Assignee: Lukáš Fryč
>             Fix For: 4.3.5
>
>   Original Estimate: 1 hour
>  Remaining Estimate: 1 hour
>
> All described here https://community.jboss.org/thread/233971
> I try repeat:
> I have this autocomplete component:
> {code}
> <table>  
>    <tr>  
>       <td>  
>          <rich:autocomplete mode="ajax" 
> autocompleteMethod="#{autocomplete.autocompleteProviders}"  
>                             minChars="0" var="s" fetchValue="#{s.realName}" 
> id="provider-suggestion"  
>                             autofill="false"  
>                             
> onselectitem="autocompleteChangeProvider(event.target)" style="display: 
> inline;"  
>                             layout="table" 
> value="#{autocomplete.providerName}" >  
>             <a4j:queue requestDelay="500" ignoreDupResponses="true" />  
>             <h:column>  
>                <h:outputText style="display:none;" value="#{s.id}"/>  
>                <h:outputText style="display:none;" value="#{s.realName}"/>  
>             </h:column>  
>             <h:column>  
>                <h:outputText value="#{s.name}" escape="false"/>  
>             </h:column>  
>          </rich:autocomplete>  
>       </td>  
>       <td>  
>          <h:graphicImage value="/img/arrow.png" 
> onclick="#{rich:component('provider-suggestion')}.setValue('');#{rich:component('provider-suggestion')}.showPopup();stopEvent(event);"
>   
>                          alt=""/>  
>          <h:graphicImage value="/img/cancel.png"  
>                          
> onclick="#{rich:component('provider-suggestion')}.hidePopup();#{rich:component('provider-suggestion')}.setValue('');autocompleteChangeProvider(null);"
>   
>                          alt="#{messages['pages.clear']}" 
> title="#{messages['pages.clear']}"/>  
>          <h:inputHidden id="filter-provider-id" 
> value="#{autocomplete.providerId}"/>  
>       </td>  
>    </tr>  
> </table>  
> {code}
> as you can see, i don't use showButton="true", because i need another 
> functionality, i need erase input text before show popup window.
> I use JavaScript function "autocompleteChangeProvider" for extract selected 
> id.
> I use separate button(/img/cancel.png) for erase input text, as you can see 
> this function just use Richfaces API.
>  
> And problem:
> if autocomplete.providerName not null and not empty(in rich:autocomplete) and 
> user clicks on cancel button(img/cancel.png), then after that, if user clicks 
> on show button(/img/arrow.png) popup not showing, user must clicks twice on 
> this button.
> *This problem shows if i use showButton from rich:autocomplete instead my 
> show button.*
> I think i found a solution of this problem:
> Autocomplete.js has this code:
> {code}
> var onChangeValue = function (event, value, callback) {  
>         selectItem.call(this, event);  
>   
>         // value is undefined if called from AutocompleteBase onChange  
>         var subValue = (typeof value == "undefined") ? this.__getSubValue() : 
> value;  
>         var oldValue = this.value;  
>         this.value = subValue;  
>   
>         if ((this.options.isCachedAjax || !this.options.ajaxMode) &&  
>             this.cache && this.cache.isCached(subValue)) {  
>             ...  
>         } else {  
>             if (event.keyCode == rf.KEYS.RETURN || event.type == "click") {  
>                 this.__setInputValue(subValue);  
>             }  
>             if (subValue.length >= this.options.minChars) {  
>                 if ((this.options.ajaxMode || this.options.lazyClientMode) && 
> oldValue != subValue) {  
>                     callAjax.call(this, event, callback);  
>                 }  
>             } else {  
>                 if (this.options.ajaxMode) {  
>                     clearItems.call(this);  
>                     this.__hide(event);  
>                 }  
>             }  
>         }  
>      }; 
> {code}
> for show popup this must be true: 
> {code}
> oldValue != subValue
> {code}
> but in this part of code 
> oldValue is ''(empty string) and subValue is ''(empty string),
> so this condition 
> {code}
> oldValue != subValue
> {code}
> return false!
>  
> i replace this code by this:
> {code}
> var onChangeValue = function (event, value, callback) {  
>         selectItem.call(this, event);  
>   
>         // value is undefined if called from AutocompleteBase onChange  
>         var subValue = (typeof value == "undefined") ? this.__getSubValue() : 
> value;  
>         var oldValue = this.value;  
>         this.value = subValue;  
>   
>         if ((this.options.isCachedAjax || !this.options.ajaxMode) &&  
>             this.cache && this.cache.isCached(subValue)) {  
>             ...  
>         } else {  
>             if (event.keyCode == rf.KEYS.RETURN || event.type == "click") {  
>                 this.__setInputValue(subValue);  
>             }  
>             if (subValue.length >= this.options.minChars) {  
>                 if ((this.options.ajaxMode || this.options.lazyClientMode) && 
> (oldValue != subValue || (oldValue === '' && subValue === ''))) {  
>                     callAjax.call(this, event, callback);  
>                 }  
>             } else {  
>                 if (this.options.ajaxMode) {  
>                     clearItems.call(this);  
>                     this.__hide(event);  
>                 }  
>             }  
>         }  
>   
>     };  
> {code}
> so, than oldValue='' and subValue=='' callAjax.call will be called and popup 
> will be showing.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

_______________________________________________
richfaces-issues mailing list
richfaces-issues@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/richfaces-issues

Reply via email to