2010-11-27 19 views
7

मैं जानना चाहता हूं, यदि यह संभव है, तो जावास्क्रिप्ट में कैसे जांचें यदि कोई तत्व बदल गया है या इसकी विशेषता है?जावास्क्रिप्ट: जांचें कि तत्व बदल गया है

मैं की तरह एक तत्व कुछ के लिए window.onhashchange की तरह कुछ मतलब है:

document.getElementById("element").onElementChange = function(); 

मैं जानता हूँ कि onchange कुछ इस तरह है, लेकिन यह काम करेगा अगर मैं इस तरह से जानना चाहता हूँ के रूप में:

var element = {}; 
element.attribute = result; 

element.attribute.onchange = function(); 
+0

आप कृपया इस बात की पुष्टि कर सके कि क्या आप वस्तु की विशेषता या DOM तत्व की विशेषता में परिवर्तन में परिवर्तन ट्रैक करने के लिए देख रहे हैं? धन्यवाद – Philar

+0

http://stackoverflow.com/questions/4266852/how-do का डुप्लिकेट -i-play-a-sound-when-an-element-change-like-so-chat-do – nyuszika7h

+0

@ Nyuszika7H मुझे ऐसा नहीं लगता: पी यह एक सामान्य प्रश्न है। – Adam

उत्तर

8

जहां तक ​​मैं समझता हूं कि आप जावास्क्रिप्ट ऑब्जेक्ट गुणों पर बदलें चाहते हैं। जवाब नहीं है, जहां तक ​​मुझे पता है, यह अस्तित्व में नहीं है।

लेकिन आप इस तरह से एक सेटर समारोह (अवधारणा का एक सबूत के रूप में) कर सकते हैं: '! कुछ नमस्ते विश्व को अपरिभाषित से बदल'

var element = {}; 

element.setProperty = function(property, value) { 
    if (typeof(element.onChange) === 'function') { 
    element.onChange(property, element[property], value); 
    } 

    element[property] = value; 
}; 



element.onChange = function(property, oldValue, newValue) { 
    alert(property + ' changed from ' + oldValue + ' to ' + newValue); 
}; 

element.setProperty('something', 'Hello world!'); 

अब आप के साथ एक बॉक्स मिलता है। और (element.something === 'Hello World!')true वापस आ जाएगा।

अगर आप अब कॉल:

element.setProperty('something', 'Goodbye world!'); 

आप 'कुछ नमस्ते विश्व से बदल के साथ एक बॉक्स प्राप्त करें! अलविदा दुनिया के लिए! '

बेशक आपको इस घटना को कैप्चर करना चाहते हैं तो आपको अपने सभी कोड में केवल setProperty विधि के माध्यम से संपत्ति सेट करनी होगी!

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

भविष्य में किसी समय, आप Object.observe() उपयोग करने में सक्षम हो सकता है।

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

अब वहाँ भी proxies है।

+0

मेरा मानना ​​है कि केवल इनपुट फ़ील्ड ऑन चेंज ईवेंट को आग लगने के बाद उनके मूल्य बदल जाते हैं ... क्या यह कोड परीक्षण किया गया है? यदि हां, तो क्या यह सभी ब्राउज़रों के तहत काम करता है? –

+0

जहां तक ​​मैं इस प्रश्न को समझता हूं, उसके पास डीओएम तत्वों से कोई लेना देना नहीं है। यह जावास्क्रिप्ट वस्तुओं के बारे में है। मैंने क्रोम कंसोल में इसका परीक्षण किया। मुझे यकीन है कि यह अन्य ब्राउज़रों पर भी काम करता है। – Jan

1

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

+0

हाँ, आपको उस ईवेंट को कैप्चर करना चाहिए जो विशेषता को बदलता है। "गुणों में परिवर्तन" के लिए कोई ईवेंट श्रोता नहीं है – timdream

+0

@ टिमड्रीम हां ऐसे परिवर्तनों पर घर की आवश्यकता नहीं है क्योंकि किसी भी तरह से (सीएसएस या जावास्क्रिप्ट), हम इन्हें मौजूदा ईवेंट मॉडल से जोड़ सकते हैं।धन्यवाद – Philar

+0

-1, यह प्रश्न डोम के बारे में नहीं है, देखें: 'var element = {};' – Jan

1

मेरा मानना ​​है कि ऐसी कोई घटना नहीं है। हालांकि, आप तत्व परिवर्तनों को देखने के लिए setInterval या setTimeout का उपयोग कर सकते हैं और इसके अनुसार प्रतिक्रिया करने के लिए इसका उपयोग कर सकते हैं।

0

मैंने यह किया। यह बहुत अच्छी तरह से काम करता है। अगर मैं जानता था तो मैं सेटप्रोपर्टी विधि का इस्तेमाल करता।

function searchArray(searchValue, theArray, ChangeValue){ 
    for (var i=0; i < theArray.length; i++) { 
     if (theArray[i].id === searchValue) { 
      theArray[i].changed = ChangeValue; 
     } 
    } 
} 

function getArrayIindex(elementid, theArray){ 
    for (var i=0; i < theArray.length; i++) { 
     if (theArray[i].id === elementid) { 
      return i; 
     } 
    } 
} 

function setInputEvents(hiddenObject) { 

     var element; 

     for (var i = 0; i < document.forms[0].length; i++) { 
      element = document.forms[0].elements[i]; 

      //Check to see if the element is of type input 
      if (element.type in { text: 1, password: 1, textarea: 1 }) { 

       arrFieldList.push({ 
        id: element.id, 
        changed:false, 
        index: i,      
       }); 

       element.onfocus = function() { 
        if (!arrFieldList[getArrayIindex(this.id, arrFieldList)].changed) { 
         hiddenObject.value = this.value; 
         this.value = ''; 
        } 
       } 

       element.onblur = function() { 
        if (this.value == '') { 
         this.value = hiddenObject.value; 
        } 
       } 

       element.onchange = function() { 
        searchArray(this.id, arrFieldList, true); 
       } 
      } 

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