2010-04-27 12 views
10

मैं jQuery मंच पर इस बारे में पूछा कुछ सप्ताह पहले भाग्य के बिना पर अक्षम हो जाता है, तो मैं फिर से यहाँ की कोशिश करेंगे :)jQuery के यूआई बटन ताज़ा

मैं एक परियोजना मैं के लिए एक सरल विजेट बनाया है पर काम कर रहा है, लेकिन मुझे एक अजीब समस्या का सामना करना पड़ा है।

उदाहरण कार्यान्वयन के साथ इसे समझा जाना सबसे आसान है। http://decko.dk/buttontest

पृष्ठ पर 3 बटन हैं। पहला मेरा ड्रॉप डाउन विजेट है। अगला एक नियमित अक्षम बटन (ए) है और आखिरी बार एक नियमित सक्षम बटन (बी) है। यदि आप पृष्ठ को रीफ्रेश करें (F5 या जो कुछ भी दबाएं) सक्षम बटन रहस्यमय रूप से अक्षम है। मुझे कोई संकेत नहीं है कि ऐसा क्यों होता है, लेकिन यदि बटन ए शुरू करने के लिए अक्षम नहीं है, तो रीफ्रेश होने पर बटन बी अक्षम नहीं किया जाएगा। साथ ही, अगर मैं अपने विजेट-कोड में डालने के लिए कॉल को हटा देता हूं, तो बटन अक्षम नहीं होगा। क्या कोई इस बात का प्रकाश डाल सकता है कि यह अजीब व्यवहार क्यों होता है?

वैसे, मैं केवल फ़ायरफ़ॉक्स में इसे पुन: उत्पन्न करने में सक्षम हूं।

+0

धन्यवाद किया जाना चाहिए था था - मैं एक ही समस्या में भाग गया –

+1

मुझे यह प्रश्न किसी समस्या से हल करने के लिए खोज रहा है, जहां क्रोम और एफएफ नहीं होगा अक्षम अक्षम jQuery UI बटन को अक्षम के रूप में प्रदर्शित नहीं करता है (यह केवल एक सक्षम बटन की तरह दिखता है, केवल आप इसे क्लिक नहीं कर सके और उस पर टूलटिप्स काम नहीं कर पाए), यह केवल ओपेरा पर अपेक्षित काम करने लग रहा था। कुछ परेशानियों के बाद, ऐसा लगता है कि "समस्या" यह थी कि मैं jQuery यूआई के बजाय "नियमित" jQuery के '.attr ('अक्षम', 'अक्षम')' ''removeAttr ('अक्षम') 'का उपयोग कर रहा था। बटन ('विकल्प', 'अक्षम', एबोलियन) '। एक बार जब मैंने बाद में स्विच किया तो यह ब्राउज़र में काम करता था। उम्मीद है कि किसी की मदद करता है। –

उत्तर

12

मेरा मानना ​​है कि यह कैसे फ़ायरफ़ॉक्स याद करते फॉर्म फील्ड/नियंत्रण मूल्यों में एक बग है और कहता है:

  1. के बाद पहले पृष्ठ लोड, वहाँ दस्तावेज़ में तीन <button> तत्व हैं, और <button id="button_a"> अक्षम है। (जब jQuery UI स्टाइल बटन सक्षम या अक्षम होता है, तो यह अंतर्निहित तत्व को उसी स्थिति में सेट करता है।)
  2. फ़ायरफ़ॉक्स याद करता है कि दूसरा <button> अक्षम है।
  3. किसी पृष्ठ को रीफ्रेश करने के बाद, किसी भी स्क्रिप्ट चलाने से पहले, फ़ायरफ़ॉक्स फॉर्म फ़ील्ड और नियंत्रण को पुनर्स्थापित करता है। यह दूसरे <button> को अक्षम करता है, लेकिन चूंकि कोई स्क्रिप्ट नहीं चला है, दूसरा बटन <button id="button_b"> है।
  4. जब jQuery यूआई <button id="button_b"> के लिए स्टाइल बटन बनाता है, तो यह देखता है कि यह अक्षम है और इसे अक्षम के रूप में शैली बना रहा है।

यहां दो मुद्दे हैं:

  1. फ़ायरफ़ॉक्स कैसे याद करते हैं जो तत्वों अक्षम हैं। यह गतिशील तत्वों को ध्यान में नहीं ले रहा है। मैं इसके लिए filing a bug with Mozilla का सुझाव देता हूं।
  2. फ़ॉर्म तत्व ताज़ा होने के बाद फॉर्म तत्व अक्षम रहते हैं। मुझे यकीन नहीं है कि यह सही व्यवहार है, लेकिन इस पर दो bugzillareports हैं।

परीक्षण का मामला सिर्फ गतिशील रूप से एक <button> तत्व जोड़ और <button id="button_a"> अक्षम करने, कोई jQuery/jQuery यूआई आवश्यक करने के लिए नीचे को आसान बनाने में कर सकते हैं:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <title>disabled button test</title> 
    <script type="text/javascript"> 
    window.onload = function() { 
     var a = document.getElementById('button_a'), 
      menu = document.createElement('button'); 
     menu.appendChild(document.createTextNode('Menu')); 
     document.body.insertBefore(menu, a); 
     a.disabled = true; 
    }; 
    </script> 
</head> 
<body> 
    <button id="button_a">A</button> 
    <button id="button_b">B</button> 
</body> 
</html> 
+0

यही वह था जो मैं सोच रहा था लेकिन उम्मीद थी कि यह एक jquery बग था (क्योंकि यह ठीक करने के लिए बहुत आसान होगा)। लेकिन आपके द्वारा दिखाए गए कोड के साथ यह फ़ायरफ़ॉक्स में बिल्कुल "कैशिंग" बग है। – Decko

4

मैं भी इस समस्या हो रही किया गया है और बाहर काम किया था फ़ायरफ़ॉक्स में मूर्खतापूर्ण व्यवहार करने के लिए नीचे, मेरे ठीक था इतनी के रूप में:

से पहले:

//set up the buttons 
$("button").button(); 

के बाद:

//set up the buttons (and make sure firefox behaves) 
$("button").button().attr("autocomplete", "off"); 
+0

सुनिश्चित नहीं है कि बटन के लिए 'स्वत: पूर्ण' क्या करना है - मेरे लिए काम नहीं किया। मैंने '$ ('बटन') का उपयोग किया। RemoveAttr ('अक्षम')। बटन(); 'इसके बजाए। – asgeo1

+0

के बाद से तो इस व्यवहार बदल गया हो फ़ायरफ़ॉक्स के संस्करणों की एक जोड़ी किया गया है लेकिन स्वत: पूर्ण बंद नियंत्रणों के राज्य को बचाने के फ़ायरफ़ॉक्स के कष्टप्रद आदत को रोकने के लिए जब एक पृष्ठ –

+0

ताज़ा किया गया था तुम बस 'स्वत: पूर्ण सेट कर सकते हैं लग रहा था =" बंद " एचटीएमएल मार्कअप में विशेषता। – guzart

0

अतीत में एक तारीख को Expires HTTP हेडर स्थापना, फायरफॉक्स 6.0 में मेरे लिए समस्या हल हो।

0

यहाँ समाधान मैं काम करता है सभी ब्राउज़रों में वास्तव में अच्छी तरह मिला ...

मैं प्रत्येक बटन (जो निष्क्रिय किया जा सकता है) एक वर्ग 'js_submit'

मैं तो किसी भी अक्षम बटन को पुन: सक्षम देना है पृष्ठ 'js_submit' के साथ पेजहाइड ईवेंट पर जो पृष्ठ को अनलोड किए जाने पर आग लगती है।

मैं एक कोशिश पकड़ के अंदर घटना काम ब्राउज़रों (जैसे कि IE के रूप में) एक त्रुटि फेंक से इस घटना का समर्थन नहीं करते रोकने के लिए चलते हैं।

यहाँ कोड है:

<input id="button" type="button" value="Submit" class="js_submit" /> 


// Fix for firefox bfcache: 
try { 
    window.addEventListener('pagehide', PageHideHandler, false); 
} catch (e) { } 

//Fires when a page is unloaded: 
function PageHideHandler() { 
    //re-enable disabled submit buttons: 
    $('.js_submit').attr('disabled', false); 
} 
-2

मेरे मामले में यह एक बूटस्ट्रैप बग

<input id="appointmentBtn" type="button" 
ng-click="addAppointment()" class="btn btn-primary btn-xs 
disabled" value="Add Appointment"> 

इसके बजाय यह इस पूछ, साथी के लिए

<input id="appointmentBtn" type="button" 
ng-click="addAppointment()" class="btn-primary btn-xs 
disabled" value="Add Appointment"> 
+0

कृपया इसे टिप्पणी के रूप में जोड़ें। – Abhi

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