2009-02-25 9 views
19

मैं एक ड्रॉपडाउन है कि एक ajax कॉल जब इसकी बदल चलाता है: लटकती पर जाने के लिएjQuery परिवर्तन() पर <select> और फ़ायरफ़ॉक्स

$('.travel-to').change(function(){ 
    $.ajax({ 
     type: "GET", 
     url: "/inc/rates/rates-viewer.php", 
     data: "shtech=y&c_name="+escape($(this).val()), 
     success: function(html){ 
      $(".rates-viewer").html(html); 
      $(".rates-viewer tr.numbers td").css({ opacity: 0 }).fadeTo("slow",1); 
     } 
    }); 
}); 

मेरे समस्या है, Firefox में, ऊपर/नीचे कर्सर कुंजियों का उपयोग विकल्प, जेएस onChange() घटना को ट्रिगर नहीं करता है। यह आईई में ठीक है।

मैं फ़ायरफ़ॉक्स को ऊपर/नीचे कर्सर को onChange के रूप में कैसे देख सकता हूं? क्या मैं onChange या एक कीप्रेस को एक ही चीज़ ट्रिगर करने के लिए, या तो ईवेंट पर या तो कर सकता हूं?

धन्यवाद।

उत्तर

26

आप वास्तव में आईई में एक बग का लाभ उठा रहे हैं। फ़ायरफ़ॉक्स सही ढंग से चेंज का समर्थन करता है, क्योंकि यह तब तक आग लगाना नहीं है जब तक ब्राउज़र चयनित क्षेत्र का ध्यान न खो जाए। (मैं answered a question कल वास्तव में इस मुद्दे के बारे में सोचता हूं।) वास्तव में चयन के साथ चेंज का उपयोग करना खतरनाक है, विशेष रूप से क्योंकि कीबोर्ड के लिए केवल कुछ विकल्प छोड़ने के लिए कोई रास्ता नहीं है। (उस के शीर्ष पर, माउस व्हील लगता एकाधिक जवाब से स्पिन, लेकिन यह वास्तव में प्रत्येक प्रविष्टि यह IE पर से गुजरता है के लिए onChange सक्रिय करता है।)

तुम सच में आग जब भी किसी को ऊपर प्रेस घटना चाहते हैं या नीचे, जब भी "ऊपर" या "नीचे" कुंजी दबाया जाता है, तो मैं ऑनकेप या ऑनडाउन घटनाओं पर आग लगाना चाहूंगा।

+3

यह हो रहा है के लिए मुझे कुछ ठीक था मिल गया। सफारी, क्रोम और आईई में 'चेंज' इवेंट सही ढंग से फायरिंग कर रहा है। ऐसा लगता है कि यह घटना आग लगने के लिए मानक कार्यक्षमता बन जाती है जब कोई तत्व बदल जाता है, इसके बाद यह ध्यान केंद्रित नहीं करता है; यही है कि 'फोकसआउट' क्या है। फिर से यह हाल ही में आधुनिक ब्राउज़रों के लिए पेश किया जा सकता है, किसी भी तरह से एफएफ को इस बदलाव को अपनाना चाहिए। – russjman

+0

मैं चुनिंदा बॉक्स के बगल में एक "जाओ" बटन जोड़कर इस समस्या को हल कर रहा हूं, इसलिए उपयोगकर्ता का पूर्ण नियंत्रण है। – BradGreens

2

शायद परिवर्तन() घटना का उपयोग करने के बजाय धुंध() घटना का उपयोग करें और यह देखने के लिए जांचें कि मूल्य बदल गया है या नहीं?

एफवाईआई, मैंने इसका परीक्षण नहीं किया है, सिर्फ एक विचार है जो मेरे पास था। और मुझे यकीन नहीं है कि यह वांछित प्रभाव है क्योंकि यह फोकस खोने पर ट्रिगर करेगा, लेकिन मैं इसे विभिन्न ब्राउज़र में प्रभाव को बनाए रखने के लिए सुझाव दे रहा हूं।

var currentValue; 

$('.travel-to').blur(function(){ 
    var val = $(this).val(); 
    if (currentValue != val) { 
     currentValue = val; 
     $.ajax({ 
      type: "GET", 
      url: "/inc/rates/rates-viewer.php", 
      data: "shtech=y&c_name="+escape(currentValue), 
      success: function(html){ 
       $(".rates-viewer").html(html); 
       $(".rates-viewer tr.numbers td").css({ opacity: 0 }).fadeTo("slow",1); 
      } 
     }); 
    } 
}); 
+0

यह अच्छी तरह से काम नहीं करता है, क्योंकि आपको धुंधला आग (कम से कम क्रोम और एफएफ 3.6) से पहले किसी अन्य चीज़ पर क्लिक करना होगा - बस इस विधि को – Evgeny

1

मैं सिर्फ फ़ायरफ़ॉक्स में कुछ अजीब व्यवहार जो चयन लटकती, बजाय उपयोगकर्ता बाहर टैब या एक पक्ष पर क्लिक करने के खोलने के तीर के साथ संचालन करें और फिर करने के लिए उपयोगकर्ता सक्षम बनाता है अनुभव किया है एक और तत्व है जो होगा क्लिक कर सकते हैं परिणाम change घटना को फायर किए बिना चयन मूल्य को बदलने में परिणाम।

इस पर काम करने के लिए आप change को keyup (कृपया अन्य घटनाओं का सुझाव भी दें?) ईवेंट को निकाल दिया गया है और चयन के बाद पिछले संस्करण का एक अलग मूल्य है।

var selectRegistry = {}, 
    $selects = $('select'); 

$selects.bind('change', function() { 
    var $this = $(this); 
    selectRegistry[$this.attr('id')] = $this.val(); 
}); 

$selects.bind('keyup scroll select', function() { 
    var $this = $(this); 
    if ($this.val()!=selectRegistry[$this.attr('id')]) 
    { 
     $this.trigger('change'); 
    } 
}); 

आप .live() फ़ंक्शन का उपयोग करता है, तो आप dinamically वेब पेज के क्रम के साथ चुनिंदा तत्वों बनाया है जाएगा कर सकते हैं।

+0

या इससे भी बेहतर प्रयास करें (यदि आप jQuery> = 1.7 का उपयोग करते हैं) '.live()' के बजाय .on() 'विधि। देखें http://www.jqapi.com/#p=on –

8

बेहतर विकल्प का उपयोग कर काम कर रहा है .on() का उपयोग समारोह बाध्य करने के लिए के रूप में कई घटनाओं

$("#member").on("change keyup", function(){ 
    ----- 
}); 
+2

इसे प्यार करें। सेन क्रॉस ब्राउज़र व्यवहार – htmldrum

+1

कमाल! धन्यवाद :) –

+2

शानदार, यह यहां सबसे अच्छा जवाब होना चाहिए। धन्यवाद। –

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