2013-05-27 7 views

Antwort

38

Sie müssten den DOM Knoten Änderungen beobachten. Es gibt eine API namens MutationObserver, aber es scheint, dass die Unterstützung dafür sehr begrenzt ist. Diese SO answer hat einen Link zu der status der API, aber es scheint, dass es keine Unterstützung für IE oder Opera bisher gibt.

Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, dass der Teil des Codes, der das Attribut data-select-content-val ändert, ein Ereignis ausgibt, das Sie hören können.

Zum Beispiel, siehe: http://jsbin.com/arucuc/3/edit auf, wie man es zusammen bindet.

Der Code ist hier

$(function() { 
    // Here you register for the event and do whatever you need to do. 
    $(document).on('data-attribute-changed', function() { 
    var data = $('#contains-data').data('mydata'); 
    alert('Data changed to: ' + data); 
    }); 

    $('#button').click(function() { 
    $('#contains-data').data('mydata', 'foo'); 
    // Whenever you change the attribute you will user the .trigger 
    // method. The name of the event is arbitrary 
    $(document).trigger('data-attribute-changed'); 
    }); 

    $('#getbutton').click(function() { 
    var data = $('#contains-data').data('mydata'); 
    alert('Data is: ' + data); 
    }); 
}); 
+7

warten, damit Ihre Antwort nicht erkennen, sondern ein Ereignis auslösen, wenn es auf einem Klick? Hmmm – ChristoKiwi

+1

@ChristoKiwi Das macht für mich auch keinen Sinn. – Jose

6

Es gibt this Erweiterungen, die ein Ereignis-Listener Änderungen Attribut hinzufügt.

Verbrauch:

<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 
<script type="text/javascript" 
    src="https://cdn.rawgit.com/meetselva/attrchange/master/js/attrchange.js"></script> 

Bind attrchange Handler-Funktion an ausgewählte Elemente

$(selector).attrchange({ 
    trackValues: true, /* Default to false, if set to true the event object is 
       updated with old and new value.*/ 
    callback: function (event) { 
     //event    - event object 
     //event.attributeName - Name of the attribute modified 
     //event.oldValue  - Previous value of the modified attribute 
     //event.newValue  - New value of the modified attribute 
     //Triggered when the selected elements attribute is added/updated/removed 
    }   
}); 
+0

FYI das zweite Skript gibt ein "Not Found" – DrLightman

+0

Dieser Link funktioniert: https://cdn.rawgit.com/meetselva/attrchange/master/js/attrchange .js –

+0

Diese Lösung stürzt Firefox und Edge ab, weil Beobachter nicht unterstützt werden. –

3

können Sie MutationObserver benutzen, um Änderungen zu verfolgen data-* Änderungen einschließlich zuschreiben. Zum Beispiel:

var foo = document.getElementById('foo'); 
 

 
var observer = new MutationObserver(function(mutations) { 
 
    console.log('data-select-content-val changed'); 
 
}); 
 
observer.observe(foo, { 
 
    attributes: true, 
 
    attributeFilter: ['data-select-content-val'] }); 
 

 
foo.dataset.selectContentVal = 1;
<div id='foo'></div> 
 

Verwandte Themen