这个想法是:你有一个隐藏的文件字段和一个图像。您可以使用该图像显示选择文件对话框。然后我在画布上显示图像。
<input id="ytfile-select" type="hidden" value="" name="Foto[image]" />
<input style="display:none" id="file-select" accept="image/*"
name="Foto[image]" type="file" />
<img id="upload-image" src="/images/design/upload-image.png"
alt="upload-image-button" />
<canvas id="canvas">
Sorry, your browser doesn't support the <canvas> element.
</canvas>
$('#upload-image').click(function(){
$('#file-select').click();
});
$('#file-select').bind('change',function(){
var fileList = this.files;
var img = document.createElement("img");
img.classList.add("obj");
img.src = window.URL.createObjectURL(fileList[0]);
var ctx = document.getElementById('canvas').getContext("2d");
ctx.drawImage(img,0,0);
});
在Firefox 10上,ctx.drawImage(img,0,0);
仅在我在该行上有Firebug调试器nad断点时才有效。没有断点,它就不起作用。我在另一个干净的档案上查了一下。
在Chrome上,$('#file-select').click();
无法打开文件对话框。
修改:此问题已经得到解答。但是,我不知道Firefox的问题是什么。有什么想法吗?
我使用这些网站来创建此代码:
编辑2 :
我通过这样做解决了Firefox的问题:
在var fileList = this.files;
行的后面,我把:
reader = new FileReader();
reader.onload = function (event) {
$('#display').append('<img src ="' + event.target.result + '">');
};
reader.readAsDataURL(fileList[0]);
答案 0 :(得分:3)
这将触发click
事件:
$('#file-select').trigger("click");
示例:强>
<input type="file" id="filesel" name="file" style="position:absolute;left:-999px;top:-999px" />
<a onclick="$('#filesel').trigger('click');" href="#">click to open</a>
JSFiddle演示:http://jsfiddle.net/t7P3v/
<强>更新强>
的确,如果input type="file"
为display:none
则不会弹出。仍然可以通过某些CSS使用户看不到它:position:absolute; top:-999px; left:-999px
答案 1 :(得分:1)
在jsfiddle上尝试this code。我不记得我在哪里复制这个插件。
插件代码
jQuery.fn.file = function(chooseHandler) {
return this.each(function() {
var element = $(this),
element_name = element.attr('data-name'),
element_id = element.attr('data-id');
// check name of radio-group
if (element_name == undefined) {
alert('Error: fileInput must have name!');
}
var holder = $('<div></div>').appendTo(element).css({
position:'absolute',
overflow:'hidden',
'-moz-opacity':'0',
filter:'alpha(opacity: 0)',
opacity:'0',
zoom:'1',
width:element.outerWidth()+'px',
height:element.outerHeight()+'px',
'z-index':1
});
var _input;
var addInput = function() {
_input = holder.html('<input name="' + element_name + '" type="file" style="border:none; position:absolute;cursor:pointer;">').find('input');
if (element_id != undefined) {
_input.attr('id', element_id);
}
if (chooseHandler) {
_input.change(chooseHandler);
}
};
var position = function(e) {
holder.offset(element.offset());
if (e) {
_input.offset({left:e.pageX-_input.outerWidth()+25, top:e.pageY-10});
}
};
addInput();
element.mouseover(position);
element.mousemove(position);
position();
});
};
使用
<div id="my-select" data-name="name-of-autogenerated-input-element" class="some custom button style"></div>
...
$("#my-select").file();