16

所以基本上,正如标题所说,我想要一个上传按钮,允许客户端上传图像,然后将其显示在 div 中。

当然,这只是客户端,所以如果页面被刷新,那么图像就会消失。

然后图像将被相应地设置样式并给定固定的宽度和高度。

我在网上搜索,根本找不到任何东西。

对 jQuery 来说非常新,虽然我可以用 Javascript 流利地编写代码。

如果没有 AJAX 和/或 PHP 的帮助,也不确定这是否可行。如果可能的话,想避免这些。

非常感谢所有帮助。

4

2 回答 2

33

这是您正在寻找的工作的JSFiddle

function readURL(e) {
    if (this.files && this.files[0]) {
        var reader = new FileReader();
        $(reader).load(function(e) { $('#blah').attr('src', e.target.result); });
        reader.readAsDataURL(this.files[0]);
    }
}

$("#imgInp").change(readURL);

附带说明一下,上述解决方案使用 jQuery,尽管它不是工作解决方案所必需的,仅 Javascript:

function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            document.getElementById('blah').src =  e.target.result;
        }

        reader.readAsDataURL(input.files[0]);
    }
}

And the HTML:

        <input type='file' id="imgInp" onchange="readURL(this);" />
        <img id="blah" src="#" alt="your image" />

function readURL() {
	//	rehide the image and remove its current "src",
	//	this way if the new image doesn't load,
	//	then the image element is "gone" for now
	$('#blah').attr('src', '').hide();
	if (this.files && this.files[0]) {
		var reader = new FileReader();
		$(reader).load(function(e) {
			$('#blah')
				//	first we set the attribute of "src" thus changing the image link
				.attr('src', e.target.result)	//	this will now call the load event on the image
		});
		reader.readAsDataURL(this.files[0]);
	}
}

//	below makes use of jQuery chaining. This means the same element is returned after each method, so we don't need to call it again
$('#blah')
	//	here we first set a "load" event for the image that will cause it change it's height to a set variable
	//		and make it "show" when finished loading
	.load(function(e) {
		//	$(this) is the jQuery OBJECT of this which is the element we've called on this load method
		$(this)
			//	note how easy adding css is, just create an object of the css you want to change or a key/value pair of STRINGS
			.css('height', '200px')	//	or .css({ height: '200px' })
			//	now for the next "method" in the chain, we show the image when loaded
			.show();	//	just that simple
	})
	//	with the load event set, we now hide the image as it has nothing in it to start with
	.hide();	//	done

$("#imgInp").change(readURL);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<form id="form1" runat="server">
        <input type='file' id="imgInp" />
        <img id="blah" src="#" alt="your image" />
    </form>

请参阅此处制作的jsFiddle Fork,以帮助解释如何更多地使用 jQuery 来回答您的一些评论问题。

于 2013-09-25T13:05:49.963 回答
0

请参阅此http://www.codeforest.net/html5-image-upload-resize-and-crop

你可以使用像 canvas 这样的 HTML5 标签……你也可以使用一些 Jquery 插件,比如 jCrop ……

于 2013-09-25T13:05:12.833 回答