2013-10-01 2 views
0

У меня есть функция, которая, если я передаю ему исходный образ, должен изменить атрибут src элемента $ ("# image"), эта функция вызывается, когда я нажимаю кнопку, которая не находится внутри формы (это означает, что страница не перезагружается)Как я могу получить ширину изображения после установки атрибута src без перезагрузки страницы

function modify_image(image_src){ 
    $("#image").attr("src", image_src); 
} 

, как я могу получить ширину этого изображения после его ЦСИ изменился?

+0

изменит изображение после нажатия кнопки? – Rajesh

ответ

2

Загрузка изображения является асинхронным, так что вы должны ждать, пока он не будет загружен, чтобы получить ширину:

function modify_image(image_src){ 
    $("#image").on('load', function() { 
     var width = this.width; 
    }) 
    .attr("src", image_src) 
    .each(function() { 
     if (this.complete) $(this).trigger('load'); 
    }); 
} 

Всегда изменить источник после был прикреплен обработчик onload события, и для кэширования изображения вы должны проверить имущество this.complete и вызвать событие onload самостоятельно.

+0

Также стоит упомянуть, что событие 'load' должно быть прикреплено непосредственно к изображению (как вы здесь) - оно не будет пузыриться, как это делают другие события, поэтому делегирование не будет работать. – Blazemonger

+0

@Blazemonger - Спасибо за все замечательные изменения – adeneo

+0

Я пытаюсь получить также высоту (var height = this.height();) но он показывает мне TypeError: this.height не является функцией [Break On This Error], что здесь не так? – medBo

1

Событие нагрузки будет срабатывать, когда изображение обновлено:

$("#image").attr("src", image_src) 
    .load(function() { 
     $(this).width(); // the new image width 
    }) 
+1

[Не всегда] (http://stackoverflow.com/questions/3877027/jquery-callback-on-image-load-even-when-the-image-is -cached). – Blazemonger

0

Вы можете использовать функцию загрузки

function modify_image(image_src){ 
    var img = new Image(); 
    img.src = image_src; 
    img.onload = function() { 
     var width = img.width; 
    }; 
    $("#image").attr("src", img.src); 
} 

В функции загрузки вы можете извлечь его свойства, такие как высота

0

Вот мой вкус:

function modify_image(image_src){ 
     $("#image").attr("src", image_src).load(function() { 
      console.log($(this).width()); 
     }); 
    } 
Смежные вопросы