2009-10-23 16 views
6

मैं निम्न HTML है:jQuery div के अंदर एक href क्लिक करने के लिए onclick div

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

यह JavaScript- सक्षम ब्राउज़र के लिए sexier थोड़ा मैं इस jQuery में शामिल किया है करने के लिए (1.3.2):

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

लेकिन मुझे लगता है कि यह एक अनंत लूप या कुछ में हो जाता है। सफारी यह दिखाता है:

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

क्या कोई भी कामकाज या बेहतर तरीका प्रदान कर सकता है?

उत्तर

9

समस्या यह है कि tr के भीतर एक झूठ है। Ergo, जब एक क्लिक() विधि ट्रिगर हो जाती है, तो ईवेंट आपके द्वारा उल्लिखित रिकर्सिव लूप बनाते हुए, इसमें युक्त ट्रबल पर बुलबुले होते हैं। .find('a').click() पर कॉल करने के बजाय, a और tr दोनों एक ही क्लिक विधि का उपयोग करें।

$('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

डाउनवोट के कारण? – Shawn

+0

हे आपको लगभग 5k तक पहुंचा;) – Mattis

-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

सीधे शब्दों में click() शॉर्टकट के बजाय bind('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')। प्रत्येक (फ़ंक्शन() { $ (यह)। ढूँढें (" ए ") .click(); झूठी वापसी; }); $ ('# PARENT a')। बाइंड ('क्लिक', फ़ंक्शन (ई) { ई.स्टॉपप्रॉपैगेशन(); }); ', अंदर क्लिक क्लिक नहीं करेगा, लेकिन इस समाधान ने अंततः चाल की। – bdanin

0

मेरा ड्रॉपडाउन में एक सूची आइटम था इसलिए मैं चाहता था कि घटना बुलबुले रहें ताकि ड्रॉपडाउन बंद हो जाए। यह वह समाधान है जिसका मैंने उपयोग किया:

$('div#outer').click(function (e) { 
    if (e.target == e.currentTarget) // prevents bubbled events from triggering 
     $($(e.currentTarget).children()[0]).trigger('click'); 
}); 
संबंधित मुद्दे