2012-07-26 119 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