JQuery :: .width() Of Image Returning 0 On Load Event?
Oct 1, 2010var img_large = new Image();
$(img_large).load(function () {
$(".image_enlarge_container").append(this);
[code]....
var img_large = new Image();
$(img_large).load(function () {
$(".image_enlarge_container").append(this);
[code]....
I have a strange issue with jQuery while using the following code :
$("#image").append('<img src="'+json.filename+'" id="cropje" alt="None" />');
$('#cropje').load(function() {
alert($(this).width());
}) .error(function(){
alert("FAIL TO LOAD IMAGE");
And the result is : 0 But it looks like the image gets loaded after the alert... How is that possible?
I got this working in chrome and was happy until I got to check out IE8! Enough said about that.The code I have now will work (in both chrome and IE8) if I manually set the height and width of the image but I cannot get them dynamically, for instance if images have different sizes, I've been trying for a while now but cannot get anywhere with it.The code I am currently using (of my own creation) is;
$("#lightbox_image_container").html('<img id="lightbox_image" src="http://www.veritywebdesign.com/gallery/gallery_images/image.jpg" />');
$("#lightbox_image").load(function() {
// image_width = $("#lightbox_image").width();
[code]....
How do I get the height and width dynamically after loading the image?
I have a weird bug that's occuring in pretty much all the browsers. If I close the tab, and then hit Ctrl -> Shift -> T to bring it back the width() method returns 0 on an appended image instead of what the image actually is. Hitting refresh on the tab removes this bug and everything works fine. I will also say that trying
.css('width') and
document.getElementById('divShadowLeft');
Both also return 0 for this bug.
I can't show all the code for security reasons, but I'll just outright ask.. what are the reasons that width() would return 0 on an image? I've checked to make sure that it was visible (both display and visibility properties), and I checked the length of the property to ensure it was there. I just can't figure out why width() is returning 0.
Here's a code snippet:
$(this).append('<img src="'+defaults["imagePath"]+defaults["imageLeft"]+'" alt="" id="'+defaults["imageClass"]+'Left" class="'+defaults["imageClass"]+'" style="" />');
alert('Length: '+$('#divShadowLeft').length+' | Width: '+$('#divShadowLeft').width()+' | Visible: '+$('#divShadowLeft').css('visibility'));
The *small, medium fullsize* text will be off to the left (in IE8 or IE9, works fine in Chrome, FireFox) and will not be aligned with the left edge of the image.
Code [URL] Line 154:
Code JavaScript:
ShowView.prototype.setImageSrc = function (imagesrc) {
var image = $('img#image');
[code]...
From what I can tell the `container.width(imageWidth);` is not rendered in IE8 or IE9. If the page is refreshed then it works. Using the built in developer tool shows the correct value in the html but if you use selector tool in the developer tool outline does not reflect the changed width value.I've tried using vanilla javascript. That did not work. I've tried setting the image source twice. That did not work either.
jquery width() and height() functions are consistently returning the wrong values for the viewport size (i.e. $(window).width). Anyone know why..or what I can do to fix it?
View 3 Replies View RelatedI'm using height() and width() to find the dimensions of some inline images in the html. FF and IE work fine, but Opera is returning incorrect values. For example, it returns 92px as the width of an image that is actually 160px wide. How can I fix this?
View 4 Replies View RelatedI have made a script that can resize a image to the "Max Width" on load. And then when you click the image you can switch between the orginal size and scaled size.
But ther are a problem with it sometime makes the image 10 px x 10 px. when the image is 800x600 and the max width is 700. I think this have something to do with it getting the org image size before the image has loadet complety. But i have tryed all day and just can't get it to work.
[Code]...
I want to load an image with JS within the form event "onsubmit" without stipping the submit action of the form.
What I do is the following:
var img = new Image();
img.onload = function(){
myfunction();
};
[Code]....
This logic is a MUST for me, I mean I don't want to use settimeout to postpone the form submit, and I have to call the URL_FOR_PHP_SCRIPT_TO_DO_SOME_LOGIC this way since this code is on a JS file from different domain. This logic works fine on all browsers, and the request to call the image is sent -which is what exactly I need-, however on safari it doesn't call the image request, and start posting the form directly. I tried to add an "onunload" event on the page containing the form when the browsers is safari, but this didn't help too, and the form still submitting data directly without starting sending the request to load the image.
I've ran into this problem more than once, there are plenty of tutorials on how to toggle/fade a hidden div that already has data placed into it, but I want to $.load() a page into an empty div ID and then toggle/fade it into view.
I can't for the life of me figure out how to do this or find anyone in Google trying to either. This has to be the first time I've ran into a limitation of jQuery and it isn't even something that should be such a problem.
I'm working on a slider script and it would be just lovely to be able to specify the slider's width in a width attribute on the input that represents it. In the code below, getAttribute("width") is returning 0 in IE, but seems to work fine in firefox. . . .
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">
var curr_slide="";
var ie = (document.all && !window.opera)?1:0;
if (!ie) document.captureEvents(Event.MOUSEMOVE)
var tempX = 0
var tempY = 0
var slide_width=200;
window.onload=function()
{
buildSlider();
}
function buildSlider()
{
var sliders=getElementsByClassName(document,'input','slider');
var len=sliders.length;
for(var i=0;i<len;i++)
{
var div=document.createElement('div');
div.className='slider_house'
alert(sliders[i].getAttribute('width'));
if(sliders[i].getAttribute('width'))
{
slide_width=sliders[i].getAttribute('width')*1;
}
div.style.width=(slide_width+10)*1+'px'
var handle=document.createElement('div');
handle.className='handle'
handle.style.left=Ɔpx'
handle.onmousedown=function()
{
curr_slide=this;
document.onmousemove=function(e)
{
getMouseXY(e);
}
document.onmouseup=function()
{
document.onmousemove="";
}
}
div.appendChild(handle);
sliders[i].parentNode.insertBefore(div,sliders[i]);
}
}
function getSlide(obj)
{
var s=obj.parentNode;
var lft1=s.offsetLeft;
var lft2=obj.offsetLeft;
var num=(lft2-lft1)-1;
if(ie)
{
num=num-10;
}
return num;
}
function getElementsByClassName(oElm, strTagName, strClassName){
var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
var arrReturnElements = new Array();
strClassName = strClassName.replace(/-/g, "-");
var oRegExp = new RegExp("(^|s)" + strClassName + "(s|$)");
var oElement;
for(var i=0; i<arrElements.length; i++){
oElement = arrElements[i];
if(oRegExp.test(oElement.className)){
arrReturnElements.push(oElement);
}
}
return (arrReturnElements)
}
function getMouseXY(e)
{
if (ie)
{
tempX = event.clientX + document.body.scrollLeft
tempY = event.clientY + document.body.scrollTop
}
else
{
tempX = e.pageX
tempY = e.pageY
}
if(tempX < 0)
{
tempX = 0
}
if(tempY < 0)
{
tempY = 0
}
n_spot=tempX-curr_slide.parentNode.offsetLeft;
var c_obj=curr_slide.parentNode.nextSibling;
while(!c_obj.nodeType==1)
{
c_obj=c_obj.nextSibling
}
if(c_obj.getAttribute('width'))
{
slide_width=c_obj.getAttribute('width')*1;
}
if(n_spot<=0)
{
n_spot=0;
}
else if(n_spot>slide_width)
{
n_spot=slide_width;
}
curr_slide.style.left=n_spot+'px'
c_obj.value=getSlide(curr_slide)*c_obj.getAttribute('alt');
}
</script>
<style type="text/css">
.slider
{
width:40px;
font-size:10px;
height:11px;
float:left;
}
.slider_house
{
clear:left;
float:left;
border-top:solid 1px #10385A;
border-left:solid 1px #FFFFFF;
border-right:solid 1px #FFFFFF;
margin-right:3px;
}
.handle
{
height:15px;
width:10px;
border-right:solid 1px #FFFFFF;
cursor:pointer;
position:relative;
left:0px;
border-left:solid 1px #FFFFFF;
background-image:url(images/triangle.gif);
}
table
{
width:100%;
}
table tbody tr td
{
border:solid 1px;
}
</style>
</head>
<body>
<br />
<form method="post">
<input type="text" alt="100" width="200" class="slider" />
<br />
<input type="text" alt="10" width="100" class="slider" />
<br />
<input type="text" alt="5" width="300" class="slider" />
<br />
<input type="text" alt="1" width="250" class="slider" />
<br />
<input type="text" alt="1000" width="50" class="slider" />
<br />
<input type="text" alt="2" width="500" class="slider" />
<br />
</form>
</body>
</html>
I want to set the width of a div to be the same width of the image inside the div.The following code works great. But...The images are different widths, so both wrappers are set to the width of the first image. Without having to add an ID to each wrapper or image, can the wrapper width be set to the image width using the name of the image as the unique identifier?
jQuery:
$(document).ready(function(){
var newWidth = $('div.wrapper img').attr('width');
$('div.wrapper').width(newWidth);
});
HTML:
<div class="wrapper">
<p><img src="image1.jpg" width="200" /><br />
Caption</p>
</div>
[code].....
I've written a small plugin to serve as a feature rotator and am having one strange problem.You can see some demos of the plugin and documentation here:
http://pbskids.org/pbskidswidgets/carousel.html.The plugin does a number of things that involve reading the width and height of DOM elements and using them to set the width and height of other elements. The problem is that sometimes in Firefox and Safari, when the page loads, the widths and heights of panels in the carousel are fracked.
Reload the page and the problem's fixed. In Safari, I can't get it to happen again on many reloads. In Firefox, though, if I reload repeatedly, I can get the problem to happen again: maybe once every seven or eight times.It looks like something's happening with page loading, but I'm at a loss to diagnose it further: is the script firing before the elements have fully loaded sometimes, and then works on subsequent tries because those elements are in the cache? Also: I've never seen this error in any of the IE versions.
I have the following script, which uses prototype.js and is called when the page loads:
function getAllDefs() {
allDefs = document.getElementsByClassName('def');
var defs = $A(allDefs);
defs.each(function(def){
Event.observe(def, "click", listElement, false);
});
}
It adds an onclick event handler to each element with a 'def' class. Clicking the element then calls the "listElement" function, defined as follows:
function listElement(e) {
alert(this.nodeName);
}
This works great in Firefox, returning "SPAN" for the element. However, in IE6, "undefined" is returned. I've tried nodeType and innerHTML as well, and all are "undefined" in IE6. Anyone know what the deal is here with IE? It's somewhat hard to tell since IE's responses are so vague.
I'm just starting my first jQuery project (tutorial from this months Web Designer) and I've got a background image that I want to spread across the entire background, regardless of browser size. It's big, so I originally had an onload function. This works fine in Mozilla and Safari but not in IE.
My question is, can jQuery set a width and height of 100% and have it work in IE?[code]...
I'm trying to learn a bit more Javascript/jQuery and I want to write a bit of code to adjust 'background-position' based on the width of the 'background-image'. So my short question is, How can I find the width of a background image using Javascript/jQuery? For those who are interested in what I'm doing (or trying): I have a list where each item has a background image along with some text. I want the images to all centrally-align along a vertical axis in a space to the left of the text. Problem is, the images are different widths, so I want to use jQuery to find their widths and calculate the appropriate background-position.
[Code]...
How can I get the width of an image when the page is ready...? I tried the code below, but it always return the value '0'...!
[Code]....
I'm trying to find a way to get the dimensions of an image without actually rendering it on the page.
I guess I could render it with the css property display:hidden, but I'd rather not do this.
Is there a way to just ask what is the dimension of an image by specifying it's url. e.g. something like
width("http://www.somesite.com/somepic.jpg");
I am trying to set a div width through the onresize event. For some reason, I am able to set the height ok. When setting the width, it will set once and then both the height and the width will not respond to the onresize event anymore. I basically want the div to resize whenever the browser is resized.
To demonstrate what I mean, copy and paste this code into a htm file. Add long strings of text to the div so that it will scroll both horizontally and vertically. Notice when resizing, the resize will get called once, but when resizing again it will not. Comment out the width line, and now the resizing will always get called.
Here is the code:
I've set up jcarousel and configured it to work how I need it to, apart from one thing; I need the images to keep their width - height ratio when the browser is resized.
I'm using the Flexible carousel configuration and the width of the images changes appropriately when the window is resized, but the height stays the same, I need it to change.
only first image in the all_images array loads and the rest stays hidden. it works first time i load the page, but any other time it loads only one image. i understand it might have to do with the cache. what could be possible cause for breaking the .each() loop after first iteration? i'm using jquery 1.3.2, png fix and php
[Code]...
I've been trying to have an image be placed during a mouse over or mouse click event. The closest to accomplishing this is having the image be replaced by the image I want to overlay.
View 2 Replies View RelatedIs there any way that one could have supersubs functionality applied to drop-down multi-column menus?I assume one would need to calculate the width of each column plus the combined width for the container.
View 1 Replies View RelatedI currently have a website where i share thoughts with my friends (some kind of forum) and within this 'forum' people can post pictures they made but most of the time these pictures exceed the max width of my website so my website gets all streched out!So this is what i want: all images on the page must run thru some sort of function which checks if the image image width exceeds the max_width. if it does then the script must calculate how many pixels the current width exceeds the max_width and get this number so that the script does: current_width = current_width - (max_width - current_width)
View 1 Replies View RelatedI've recently start using Flexigrid (old JQuery grid plugin), and, as you may know, one of the few issue this really good grid plugin got is the lack of liquid layout option. My personal idea to solve the problem is to set the "width" parameter depending on $(window).width. Here is the problem (and here's why i post this question in "General use" and not in "Plugin").
The starting, and working, code is:
$(document).ready(function(){
$("#flex1").flexigrid
(
{
[Code].....
This work fine for me, but I supose it could be done way much elegant... maybe somethin without "IF" that could emulate the "%", like var percentage = $(#div.id).width()*0.XX with the 0.XX picked from an array of percentage, one for each column. Probably I should set up a function... ahhhh, as you may easily see I'm a total beginner with JQuery (and JS in general...)
When a user clicks a button I dynamically load large CSS and JS files. I handle it in this way:
[Code]...
It works great, but the problem is that sometimes the dialog box opens before the CSS has loaded. I would like to add the equivalent of $ ("#example").load(), since using load() does not seem to work.