2011-11-17 41 views
0

我正在使用primefaces的自動完成組件。現在,您要添加幾個字符並相應地搜索名稱。現在我遇到的麻煩是「輸入」按鈕(在鍵盤上)...因爲我想讓輸入功能正常工作,即使您正在搜索自動填充,您仍然可以按下它並繼續獲取更大的列表。現在,這是通過一個轉到Webflow並重定向到另一個頁面的按鈕完成的。停止ajax請求而不知道哪個

現在我遇到的麻煩是,如果自動完成開始搜索,它會啓動一個Ajax請求,如果我點擊輸入,它將啓動另一個請求來做重定向。但是這裏有一個問題:第一個請求仍然是活動的,如果它在我的重定向完成之前返回成功,它就會中止重定向,併爲我提供頁面開始的地方。

現在最大的問題是:如何停止對我一無所知的第一個請求? Blackbox明智我不太瞭解這個請求,除非它非常煩人。我無法通過JavaScript傳遞它,因爲自動完成功能只有在請求之前加載的on start啓動函數,而在請求之後加載完成後才啓動。

編輯:這裏是我的情況下,使用的代碼,你需要了解:

XHTML和JavaScript:

<p:autoComplete value="#{simpleSearchBean.searchString}" completeMethod="# {simpleSearchBean.completeUser}" 
var="user" itemLabel="#{user}" itemValue="#{user}" forceSelection="false" 
minQueryLength="3" maxResults="10" name="search_block_form" id="edit-search-block-form-1" size="30" queryDelay="500" style="float:left;"> 
    <p:ajax event="itemSelect" oncomplete="autoClickSearchButton()" update="@all"/> 
</p:autoComplete> 

<p:commandButton action="simpleUserSearch" title="#{msgs_common['common.search']}" name="op" id="edit-submit" image="ui-icon ui-icon-search" style="float:left;"/> 

<script type="text/javascript"> 
function autoClickSearchButton(){ 
    jQuery('#search-block-form\\:edit-submit').click(); 
} 

jQuery('#search-block-form\\:edit-search-block-form-1').keyup(function(event){ 
    if(event.keyCode == 13){ 
     jQuery('#search-block-form\\:edit-submit').click(); 
    } 
}); 
</script> 

這裏是一個Webflow片:

<end-state id="simpleUserSearch" view="flowRedirect:user?searchString=#{simpleSearchBean.searchString}"/> 

<global-transitions> 
    <transition on="simpleUserSearch" to="simpleUserSearch" validate="false"/> 
</global-transitions> 

回答

0

我有同樣的問題,解決這個問題的最好方法是這樣的:

var ajaxObject = $.ajax({your code here}); 

上提交做到這一點:

ajaxObject.abort(); 

這會阻止您運行Ajax腳本。

+0

這將工作,如果我真的寫Ajax電話......但我不是。這是primefaces,使我的請求...所以我不能讓它變量 – Lyrion

+0

這是真的,這個例子只會工作,如果你寫Ajax調用。 – Alex

0

我不認爲你甚至需要一個功能收聽如果用戶按下enter ...自動完成已經做的是...如果你想在search commandButton重定向到另一個頁面,只需設置ajax attribute to false

<p:commandButton ajax='false' action="simpleUserSearch" title="#{msgs_common['common.search']}" name="op" id="edit-submit" image="ui-icon ui-icon-search" style="float:left;"/> 
+0

啊,但你確實需要輸入,因爲當自動完成完成它的值列表輸入僅適用於LOV選擇。而不是在場上,我仍然需要。而麻煩的是,將Ajax屬性設置爲false不起作用,因爲Get請求在完成列表請求時仍然中止...這就是爲什麼我需要在其軌道中停止完成請求。 – Lyrion

+0

@RafaelCelerier放棄一個ajax請求這不是一個好習慣......你必須改進你的邏輯,你必須找到替代的,好的方法......我仍然不明白什麼/爲什麼不適合你;嘗試http://www.primefaces.org/showcase-labs/ui/autoCompleteSelect.jsf - 我看到那裏的Ajax的作品,如果你按下輸入它顯示你請求的對話框。 – spauny

+0

ajax在Lala中的pojo字段類型中不起作用...並按下回車鍵,彈出窗口顯示但未填充。它們還強制選擇,意味着如果LOV顯示您只能在這些選項和按回車,我不想...我仍然希望inputfield值也能夠搜索。我真正能想到的唯一好方法就是拋棄primefaces並使用JQuery和javacontroller進行自動完成......但是這種情況很快就不會發生。 – Lyrion