2011-05-10 53 views
0

我有一个列出我的联系人的页面,每个联系人都包含在一个div中,onClick打开一个模式对话框,显示有关该联系人的更多信息。不想要对话框打开

现在,在页面上,每个联系人都列出了姓名和电子邮件,并且如上所述,点击用户“框”会导致显示对话框。但是我希望它能让我点击电子邮件(链接当然),对话框不会显示,而是默认邮件处理程序打开。

它的工作方式现在默认邮件处理程序(outlook)打开并且用户对话框也打开了...我尝试销毁并关闭对话框,当我点击电子邮件但对话框可能打开后.. 。

有什么好的解决办法?

编辑:我觉得我有一些很好的答案,但它需要一些收养......如果我的网页上的代码是什么样子的:当我点击的userMail中的onClick

<ul id="users"> 
    <li onClick="OpenUserDialog(usersId);"> 
     blablala 
     <span onClick="OpenMail(usersMail);">usersMail<span> 
    </li> 
</ul> 

所以<li>也运行,但我不想那样。

+0

能否请您提供一些代码,以便我们可以帮助您在可以按照你实现一个更好的办法 – Marthin 2011-05-10 09:37:12

回答

3

您可以选择邮件联系,并在他们的处理程序,取消该事件的传播。

假设一个HTML布局是这样的:

<div class="popupOpener"> 
    <a href="mailto:[email protected]">mail me</a> 
</div> 

那就试试这个代码:响应

$('div.popupOpener').click(function() { 
    openPopup(); 
}); 

$('a[href^="mailto:"]').click(function (e) { 
    e.stopPropagation(); 
}); 

更新编辑:

你应该避免附加事件元素以这种方式。您已经在使用jQuery,并且擅长这个确切的任务。改变你的HTML看起来像这样:

<ul id="users"> 
    <li data-userId="usersId"> <!-- I assume this is coming from the server --> 
     blablala 
     <a href="mailto:usersMail">usersMail</a> 
    </li> 
</ul> 

然后这个jQuery将工作:

$('#users') 
    .children('li') 
    .click(function() { 
     openPopup($(this).data('userId')); // not 100% sure on the syntax here 
    }) 
    .children('a') 
    .click(function (e) { 
     e.stopPropagation(); // this stops the event from going any further (and 
          // reaching the <li>, but doesn't stop the default 
          // browser behaviour (which is to open the link) 
    }) 
; 
+0

请看我的编辑 – Jason94 2011-05-10 10:07:10

+0

@Jason see * my * edit – nickf 2011-05-10 11:11:14

0

这听起来像你需要停止传播的onclick事件,jQuery中例如

$("#myDiv").click(function(event){ 
    event.stopPropagation(); 
}); 
+0

你需要停止传播,然后到达div – nickf 2011-05-10 09:26:11