.width()为图像宽度返回0

时间:2013-08-06 19:57:07

标签: jquery

我正在尝试记录图像的宽度,我尝试的每件事都会返回0.任何想法为什么?这是我到目前为止所做的。

的jQuery

var imgWidth = $('#imageMap').width();
console.log(imgWidth);

生成图像的ERB

 <% @image.each do |image| %>
      <% image.contacts.each do |conn| %>
        <span class="connection" data-pos-x="<%= conn.pos_x %>" data-pos-y="<%= conn.pos_y %>"  data-pos-width="<%= conn.pos_width %>" data-pos-height="<%= conn.pos_height %>"> </span>
      <% end %>
      <%= f.hidden_field :image_id, value: image.id %>  
      <%= image_tag(image.image.url(:large), id: 'imageMap')  %>
  <% end %>

5 个答案:

答案 0 :(得分:5)

如果img标签本身在其样式属性中没有宽度或者设置了宽度属性,则只要图像未完全加载,返回的宽度就为0。使用“load”事件来检测此信息或在图像上手动设置宽度(如果您知道):

$('#imageMap').attr('src', 'your_image.jpg').load(function() {  
    console.log($(this).width());
});

答案 1 :(得分:1)

您需要先加载图片

$("<img/>").attr("src", "path/image.jpg" ).load(function() {
  var pic_real_width = this.width;  
  var pic_real_height = this.height;
}

答案 2 :(得分:1)

jQuery中的典型用法是使用document.ready(),但这并不能确保加载<img>个元素。

而是使用window.load()

$(window).load(function() {
  // check image widths here
});

您还可以在单​​个DOM元素上连接load(),但这种方法不允许轻松迁移到document.ready()

答案 3 :(得分:0)

除非加载图像,否则无法测量图像尺寸,这可能需要一些时间,具体取决于文件大小(大图像)。最简单的方法是为尺寸(高度,宽度)定义CSS属性。

如果每张图片的尺寸不同,您需要深入了解Javascript中的图片回调。

答案 4 :(得分:0)

我已经测试过你使用的jquery函数,这绝对没问题......

var imgWidth = $('#imageMap').width();
  1. 如果有多个具有相同ID的元素,它将返回具有该ID的第一个元素的宽度。

  2. 如果具有该id的元素根本不存在,它将返回null。

  3. 如果图片位置不正确或未加载&amp;在没有提供宽度的情况下,只有它会返回0.

  4. 据我说,你的问题应该在于第三种情况。因此,如果您稍后在代码中的某处下载图像,那么您应该在onload函数或$(Document)中编写该部分.ready();