2011-11-21 16 views
5

मैं अपने डोजो-आधारित एप्लिकेशन में कुछ dijit.form.NumberSpinner विगेट्स का उपयोग कर रहा हूं, वे सभी onChange क्रियाओं से जुड़े हुए हैं।dijit.form.NumberSpinner विजेट पर mousewheel घटनाओं को कैसे अक्षम करें?

एक समस्या तब होती है जब एक NumberSpinner रों के बहुत सारे के साथ एक क्षेत्र है: उपयोगकर्ताओं को पेज में स्क्रॉल और सभी क्षेत्र में माउसव्हील से स्क्रॉल करते समय गलती से अनायास ही मूल्यों के साथ NumberSpinner फ़ील्ड भरें।

क्या dijit.form.NumberSpinner विगेट्स पर मूसहेल घटनाओं को अक्षम करना किसी भी तरह से संभव है?

उत्तर

6

आपको इसकी आवश्यकता कभी नहीं है, और आप डोजो सूत्रों की पहुंच है और अपने खुद के बनाता है ऐसा करने में सक्षम हैं, dijit/प्रपत्र/पर इस लाइन टिप्पणी _Spinner.js:

postCreate: function(){ 
    // [...] 
    // this.connect(this.domNode, !has("mozilla") ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled"); 
    // [...] 
} 

वैकल्पिक रूप से, आप अपने विजेट पर सत्य पर intermediateChanges गुण सेट कर सकते हैं और कुछ इस तरह करते हैं:

अपने html में:

<input id="spinner1" name="someNumber" data-dojo-type="dijit.form.NumberSpinner" data-dojo-props="value:'1000',smallDelta:'10',constraints:{min:9,max:1550,places:0}, intermediateChanges:'true'"/> 

अपने जावास्क्रिप्ट ब्लॉक में:

dojo.ready(function(){ 
    var spinner = dijit.byId("spinner1"); 
    var currentValue = spinner.get('value'); 
    dojo.connect(spinner, "onChange", function(value){ 
     currentValue = value; 
    }); 
    dojo.connect(spinner.domNode, (!dojo.isMozilla ? "onmousewheel" : "DOMMouseScroll"), function(e){ 
     spinner.set('value',currentValue); 
    }); 

}); 
+0

आपके द्वारा वर्णित स्रोतों को अनुकूलित करने और स्वयं के निर्माण को पूरी तरह से मेरे लिए तैयार करने के लिए, thx। ;-) – proximus

+0

आपका स्वागत है। मुझे खुशी है कि इससे मदद मिली ... – Philippe

1

एक त्वरित और गंदे तरह जब विजेट फोकस dijit/form/_Spinner.js में _mouseWheeled के शीर्ष करने के if (!this.focused) return; जोड़ने के लिए है माउसव्हील ही काम है।

_mouseWheeled: function(/*Event*/ evt){ 
    // summary: 
    //  Mouse wheel listener where supported 
    if (!this.focused) return; 
    ... 

विजेट का विस्तार करने का उचित तरीका हालांकि उचित तरीका होगा।

// Disable _mouseWheeled when not in focus. 
require(
    [ 
     "dojo/_base/lang" 
     , "dojo/_base/event" 
     , "dijit/form/_Spinner" 
    ] 
    , function(
     lang 
     , event 
     , _Spinner 
    ){ 
     lang.extend(_Spinner, { 
      _mouseWheeled: function(/*Event*/ evt){ 
       // summary: 
       //  Mouse wheel listener where supported 

       if (!this.focused) return; 

       event.stop(evt); 
       // FIXME: Safari bubbles 

       // be nice to DOH and scroll as much as the event says to 
       var wheelDelta = evt.wheelDelta/120; 
       if(Math.floor(wheelDelta) != wheelDelta){ 
        // If not an int multiple of 120, then its touchpad scrolling. 
        // This can change very fast so just assume 1 wheel click to make it more manageable. 
        wheelDelta = evt.wheelDelta > 0 ? 1 : -1; 
       } 
       var scrollAmount = evt.detail ? (evt.detail * -1) : wheelDelta; 
       if(scrollAmount !== 0){ 
        var node = this[(scrollAmount > 0 ? "upArrowNode" : "downArrowNode")]; 

        this._arrowPressed(node, scrollAmount, this.smallDelta); 

        if(!this._wheelTimer){ 
         clearTimeout(this._wheelTimer); 
        } 
        this._wheelTimer = setTimeout(lang.hitch(this,"_arrowReleased",node), 50); 
       } 
      } 
     }); 
    } 
); 

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

  • कोई संबंधित समस्या नहीं^_^