I have seen this working on some websites with exactly the same environment below, but it doesn't work for my own very simplified code, even if I copied the same markup with the same aria attributes from the working site.
Environment: Safari 9.1.2 + voice over on OS X El Capitan
I tried changing aria-atomic, aria-live, aria-relevant and it always read from the beginning of the live region every time I add some new content to the live region. Any ideas why it doesn't work and how to make it work?
html
<label for="speak-content"></label>
<input id="speak-content" type="text">
<button id="speak">add some stuff to read</button>
<div id="live-region" role="alert" aria-live="polite" aria-atomic="false" aria-relevant="additions"></div>
javascript
$("#speak").on("click", function(event) {
var liveRegion = $("#live-region");
var content = $("#speak-content").val();
var p = $("<p>").text(content);
liveRegion.append(p);
});