2012-07-26 162 views
0

我有一個jQuery自動完成設置,爲此我有一些特殊要求。自定義選擇()的jQuery自動完成:自定義HTML中的超鏈接

  • 這是 「用戶簡檔」,其中每個自動完成條目由_renderItem渲染自動完成如下:

用戶名:_firstname_lastname_


電話number:_clickable_phone_number_


這部分工作正常。

  • 選擇後,立即導航到其他頁面。我已經實現了這個使用自定義選擇使用window.replace去一個不同的頁面(該人的個人資料)

這工作得很好。

  • 最後, 「_clickable_phone_number_」 鏈接應該調用另一個JavaScript片段。或簡單的超鏈接

最後一部分是我遇到問題。由於我在選擇後立即導航到不同的頁面,因此我無法弄清楚如何「阻止」此操作。

我能夠將.live添加到_clickable_phone_number_並運行一些JS,但我無法停止導航到配置文件頁面。

我希望我很清楚。如果沒有,我可以進一步解釋。

任何人都可以幫助我如何實現這一目標?基本上,儘管自定義select()導航到不同的頁面,但我如何從自定義呈現的HTML中超鏈接。

編輯:由於代碼片斷可能會說清楚,這裏就是我的意思:

我的jQuery自動完成有一個選擇,像這樣:

$('#input').autocomplete({ source: users, minLength: 3, 
select: function(event, ui) 
{ window.location.replace("/profile.asp?id=" + ui.item.value); } 

}).data("autocomplete")._renderItem = function (ul, item) { .. } 

HTML每個自動完成渲染的元素:

<div class=".ui-menu"> 
<div class="name">FirstName LastName</div> 
<div class="phone">12345</div> 
</div> 

我已在現場活動設置像這樣:

$('.phone').live("click", function() { callPhone($(this).html()); return false; }

+0

您遇到問題的代碼片段將非常有用。 – 2012-07-26 18:44:35

+0

爲什麼你不檢查事件源元素,看看事件是否來自電話號碼片段? – jbabey 2012-07-26 18:47:28

+0

你的意思是$(這個)?如果是這樣,在自動完成的select()中,$(this)引用輸入元素。除非我誤解了你的觀點 – ragebiswas 2012-07-26 18:52:45

回答

1

你嘗試使用http://api.jquery.com/event.stopPropagation/

你得改變,而不是使用最多的直播你的代碼了一下,電線了在打開的情況下您的電話聯繫。

$('#input').autocomplete({ 
    source: users, 
    minLength: 3, 
    select: function(event, ui){ 
     window.location.replace("/profile.asp?id=" + ui.item.value); 
    }, 
    open: function(event, ui){ 
      $('.phone').click(function(e) { 
       e.stopPropagation(); 
       callPhone($(this).html()); 
       return false; 
      }); 
    } 
}).data("autocomplete")._renderItem = function (ul, item) { .. } 

你不能再使用.live的原因是因爲。現場直播活動直到他們一直泡到文檔中才開始,所以你不能阻止任何事情。

我沒有測試過這個,但它應該可以工作。

+1

明智的答案帕特麗夏,非常感謝你。清脆,簡潔,和工作。是的,我剛剛在別處讀過,因爲我無法阻止任何事情,所以生活並不是一個好主意。但是沒有意識到我可以使用open()鉤子。我喜歡SO :-) – ragebiswas 2012-07-26 19:36:20

+1

.live()不是一個好主意,原因很多。儘可能避免它。 – Patricia 2012-07-26 19:56:14