2010-05-06 26 views
5

$ ("इनपुट [type = 'बटन'] [onclick^= 'बचाने']")jQuery onclick चयनकर्ता काम नहीं करता है

और यह एफएफ में लेकिन IE पर काम करता है ...

ऑनक्लिक चयनकर्ता भाग के साथ कुछ गड़बड़ है। क्या क्रॉस-ब्राउज़र वर्कअराउंड बनाने का कोई तरीका है?

धन्यवाद पावेल

संपादित करें:

$("img[src$='scroll.gif']").click(function(){ 
    var targetOffset = $("input[type='button'][onclick^='save']").offset().top; 
    $("html,body").animate({scrollTop: targetOffset}, 400); 
}); 
+0

तो तुम एक बटन जिसका onclick एक विधि को बचाने के साथ शुरू करने के लिए बाध्य है खोजने की कोशिश कर रहे हैं? – justkt

+0

हाँ, ठीक – dragonfly

उत्तर

1

आप एक कस्टम चयनकर्ता बना सकते हैं (शायद बहुत अक्षम हालांकि):

$.extend($.expr[':'], { 
    onclick: function(node, index, args, stack) { 
    var events = $(node).data('events'); 
    var fn = args[3]; 
    if (!events || !events.click) return false; 
    for (i in events.click) { 
     if (events.click[i].name == fn) return true; 
    } 
    return false; 
    } 
}); 

$("input[type='button']:onclick('save')") 

function.name IE में काम नहीं करता है, हालांकि, तो आप toString() और regexps का उपयोग कर एक और हुक के माध्यम से कूद करना होगा। सब कुछ, आप ईवेंट हैंडलर नामों की सूची को मैन्युअल रूप से बनाए रखने से कहीं बेहतर हैं।

संपादित करें: अपने कोड स्निपेट को देखकर, ईवेंट हैंडलरों की खोज करने के लिए कोई कारण नहीं है। चारों ओर विशेषता चयनकर्ताओं को जंगली रूप से फेंकने के बजाय, अपने तत्वों को एक अर्थपूर्ण अर्थपूर्ण तरीके से संबोधित करने के लिए कक्षाओं और आईडी का उपयोग करें, उदा।

<img id="scroll-icon" src="icons/scroll.gif" /> 
<input id="submit-button" type="submit" onclick="save();" /> 

और फिर

$("#scroll-icon".click(function(){ 
    var targetOffset = $("submit-buttton").offset().top; 
    $("html,body").animate({scrollTop: targetOffset}, 400); 
}); 
+0

हाँ, आईडी जोड़ना सबसे आसान समाधान है। लेकिन जैसा कि मैंने ऊपर एक टिप्पणी में उल्लेख किया है, मेरे पास प्रोजेक्ट में जोड़े "सैकड़ों स्क्रॉल छवि और स्क्रॉल करने के लिए बटन" हैं। पूछो क्यों :) :) वैसे भी, सूचनात्मक उत्तर के लिए धन्यवाद। मुझे लगता है कि मैं आईडी/कक्षा विशेषताओं को जोड़ना समाप्त कर दूंगा ... – dragonfly

+1

jQuery में ट्रैवर्सल फ़ंक्शन बहुत लचीले होते हैं। कक्षाओं का प्रयोग करें, और आप शायद डीओएम पेड़ में अपनी सापेक्ष स्थिति के आधार पर सही बटन पा सकते हैं। जैसे '$ (यह)। माता-पिता ('ब्लॉक: पहला')। ढूंढें ('सबमिट सबमिट करें') 'कंटेनर (आइकन के' वर्ग =" ब्लॉक "' के साथ) मिलेगा, और सबमिट बटन देखें क्या आप वहां मौजूद हैं। – Tgr

+0

यहां तक ​​कि सरल (आप हर दिन कुछ सीखते हैं): '$ (यह) .closest ('। Block')। ढूंढें ('सबमिट सबमिट करें')' – Tgr

6

ऐसा लगता है कि होना चाहिए:

$("input[type=button]").click(function(){ 
//do something 
}); 

आप document ready समारोह में यह रखना चाहिए

संपादित आप यही चाहते है ?

$('img[src="scroll.gif"]').click(function(){ 
     var targetOffset = $(this).offset().top; 
     $("html,body").animate({scrollTop: targetOffset}, 400); 
    }); 
+1

धन्यवाद। लेकिन मैं कुछ और हासिल नहीं करना चाहता था। पूरा कोड देखें – dragonfly

+0

@dragonfly आप क्या हासिल करना चाहते हैं, क्या आप कृपया अपना प्रश्न संपादित कर सकते हैं, थोड़ा और विवरण – ant

3

क्या आपके पास एक से अधिक बटन हैं जो एक सेव बटन है? यदि नहीं, तो आप अपने बटन को एक आईडी क्यों नहीं सौंपते? इससे यह बहुत आसान हो जाता है, और आईडी चयनकर्ता, जो document.getElementById() लपेटता है, बहुत क्रॉस-प्लेटफॉर्म है। फिर, आपको केवल $("#buttonID") की आवश्यकता है।

संपादित करें: ओपी के मानदंडों को देखते हुए, मैं एक वर्ग (केवल चयनकर्ता के रूप में उपयोग के लिए) जैसे "jumpToSave" का सुझाव दूंगा। प्रत्येक बटन में उस वर्ग होना चाहिए, और फिर चयनकर्ता $(".jumpToSave")

+0

मेरी मदद करेगा कि मेरे पास उस तरह का केवल एक बटन था। लेकिन दुर्भाग्य से मेरे पास पूरी परियोजना में सैकड़ों हैं ... इसलिए मैं आवश्यक प्रयास को कम करना चाहता था। – dragonfly

+0

क्या आप उन्हें एक ही कक्षा दे सकते हैं और ऐसा कर सकते हैं? – justkt

2

का उपयोग कर सकता है, आप ईवेंट विशेषताओं में उस तरह के मान की तलाश नहीं कर सकते हैं। ब्राउज़र विशेषता में स्ट्रिंग मान से एक फ़ंक्शन बनाता है।

आप इस तरह एक विशेषता है:

onclick="save();" 

विशेषता एक समारोह संदर्भ के बजाय एक स्ट्रिंग है। यदि आप विशेषता को पढ़ते हैं और मान को स्ट्रिंग के रूप में प्राप्त करते हैं, तो आपको फ़ंक्शन का कोड मिलता है।

जब फ़ायरफ़ॉक्स में विशेषता मान पढ़ना, यह आप क्या मिलता है:

function onclick(){save();} 

आप उपयोग करने के लिए:

function onclick(event) { save(); } 

जब इंटरनेट एक्सप्लोरर में विशेषता पढ़ने, यह आप क्या मिलता है बटन की पहचान करने के लिए कुछ अन्य विशेषताएँ।

+0

मुझे आपका अंक मिलता है। भले ही $ (el) .attr ("onclick") स्ट्रिंग सेव() को वापस नहीं लौटाता है, ऊपर दिए गए चयनकर्ता एफएफ में काम करते हैं, इसलिए मैं इसका उपयोग करना चाहता था। जानकारी के लिए धन्यवाद। – dragonfly

संबंधित मुद्दे