Зачем var post_img = post_img;, если это аргумент функции и уже передан?
Положите в каталог скрипта две картинки - img0.png и img1.png, и выполните такой пример:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style>
.ims {
width: 256px;
height: 256px;
background: url(img0.png);
}
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
var n = 0;
$('div.ims').click(function() {
n ^= 1;
this.style.background = 'url(img'+n+'.png)';
})
});
</script>
</head>
<body>
<div class="ims"></div>
</body>
</html>
Что так - this.style.background, что используя jQuery вместо этого, работать будет.
Зачем вообще new Image() и .onload = function() для него? Или так не подходит и обязательно ждать окончание загрузки?
Хотя и так без проблем будет работать:
$(function() {
var n = 0;
$('div.ims').click(function() {
n ^= 1;
var o = this, img = new Image();
img.src = 'img'+n+'.png';
img.onload = function() {
o.style.backgroundImage = 'url('+this.src+')';
}
})
});
То есть ошибок как таковых нет, возможно путь неверен, или, если используется одно и тоже имя, а изображение изменяется при этом сервером (каптча к примеру), а браузер кешировал его.