2009-10-23 77 views
6

我有以下HTML:的jQuery的div的onclick點擊DIV中一個href

<table class="products"> 
    <tr> 
    <td>Product description probably goes here</td> 
    <td><a href="#">more information</a></td> 
    </tr> 
</table> 

,使其成爲支持JavaScript的瀏覽器性感一點我已經添加了這個jQuery(1.3.2):

$(document).ready(function(){ 
    $('table.products tr').click(function(){ 
    $(this).find('a').click(); 
    return false; 
    }); 
}); 

但我認爲它進入了一個無限循環或什麼。 Safari展示了這一點:

RangeError: Maximum call stack size exceeded. jquery.min.js:12

任何人都可以提供解決方法或更好的方法?

回答

9

這裏的問題是一個謊言在tr。 Ergo,當click()方法被觸發時,事件冒泡到包含它的tr,創建你提到的遞歸循環。不要致電.find('a').click(),請讓atr使用相同的點擊方法。

$('tr, a').click(function(){ 
    //dostuff 
    return false; 
}); 
0

首先,我會console.log($(this).find('a')),並確保它是適當的鏈接。 接下來,我相信點擊事件不是你想要的a元素。我覺得你只是想:var a = $(this).find('a'); if (a) document.location.href = a.attr('href');

我的JavaScript是相當薄弱的,雖然:)

+0

downvote的原因是什麼? – Shawn 2009-10-23 19:48:40

+0

嘿幾乎讓你到5K;) – Mattis 2011-08-20 18:14:08

-2
$(document).ready(function(){ 
    $('table.products tr').click(function(e){ 
    e.stoPropagation(); // for stop the click action (event) 
    $(this).find('a').click(); 
    return false; 
    }); 
}); 
1

簡單地嘗試使用bind('click'),而不是click()快捷方式,它爲我工作幾乎相同的情況下。

6

我有同樣的問題,我將e.stopPropagation();到一個上點擊解決它:

$(document).ready(function() { 
    $('table.products tr').bind('click', function() { 
    $(this).find('a').click(); 
    return false; 
    }); 

    $('table.products tr a').bind('click', function(e) { 
    e.stopPropagation(); 
    }); 
}); 
4

這是一個相當晚的答案,但我發現這是一個很短的和簡單的解決方案:

$('ul li').bind('click', function() { 
    location = $(this).find('a').attr('href'); 
}); 
+1

這是我工作的唯一答案,嘗試: '$('#PARENT')。each(function(){(this).find(「a」) .click(); return false; }); ('#PARENT a')。bind('click',function(e){e.stopPropagation(); });',內部點擊不起作用,但是這個解決方案終於實現了。 – bdanin 2015-03-30 13:13:10

0

我是一個下拉列表項,所以我希望事件繼續冒泡,所以下拉將被關閉。這是我使用的解決方案:

$('div#outer').click(function (e) { 
    if (e.target == e.currentTarget) // prevents bubbled events from triggering 
     $($(e.currentTarget).children()[0]).trigger('click'); 
});