gpt4 book ai didi

javascript - 第二次使用输入文件不再触发 onchange

转载 作者:技术小花猫 更新时间:2023-10-29 12:47:05 27 4
gpt4 key购买 nike

我有一个图片上传按钮,当从浏览窗口中选择时,它会自动上传文件。
尽管如此,它第二次不起作用,那是因为没有触发 onChange 事件。为什么会这样?

这是一个用例:
1. 单击按钮,调用 uploadMessagePicture(),打开浏览窗口。
2. 当用户选择图片时,会检测到触发 ajaxFileUpload() 并显示照片编辑区域的 onChange 事件。
3. 上传完成后,会显示图像预览。4. 用户调用deleteMessageImage()删除图片(同时清除字段,隐藏图片编辑器)。
5. 用户尝试上传另一张图片。

此时,浏览窗口出现,但是当我选择一张图片时,没有触发 onChange 事件,所以什么也没有发生......(另外,似乎文件名甚至没有传输到输入'值领域。)
我在 Firefox 23.0.1 上

这是 HTML:

<a class="im-photo-btn" href="javascript:;" onclick="javascript:uploadMessagePicture();"><i class="icon-join-photo"></i></a>

<div class="editor-photoarea" id="editor-photoarea" style="display:none;">
<input name="image_message_file" type="hidden" id="image_message_file" value="" />
<div id="image_message_upload">
<input name="image-message" type="file" id="image-message" style="display:none; visibility:hidden;" />
<!-- hide it and trigger it from the photo btn (need both display:none + visibility:hiden for browser compatibility) -->
</div>
<div class="loading" id="image_message_loading" style="display:none;"><img alt="<?php echo $lang["Loading"];?>" src="lib/immedia/img/ajax-loader.gif" /> <?php echo $lang["Loading"];?></div>
<div class="preview" style="display:none;" id="image_message_preview">
<!-- <div>Image preview :</div>
<div id='small_message_msg'></div>
<img src='' />
<div class='btnoptions'>
<a onclick='javascript:deleteMessageImage();' href='javascript:;' class='button' title="Delete photo">
<span class='ui-icon ui-icon-closethick smsg'></span>Delete
</a>
</div>-->
</div>

这里是自动上传图片的javascript

$(document).ready(function (){
$("#image-message").on('change', function () {
$('#editor-photoarea').show();
ajaxFileUploadMessagePicture();
});
});

function uploadMessagePicture(){
//trigger the browse click
if($('#image_message_file').val() == ''){
//let the person upload a file only if none are there
$('#image-message').trigger('click');
}
}

function ajaxFileUploadMessagePicture(){
$("#msg_error_no_image_message").hide();

var imageName = $("#image-message").val();
if(imageName != ''){
$("#image_message_loading").show();
$('#sendBtn').attr('disabled', 'disabled');

$.ajaxFileUpload
(
{
url:siteRegionDir+'lib/immedia/uploadMessagePicture.php',
secureuri:false,
fileElementId:'image-message',
dataType: 'json',
success: function (data, status)
{
updateMessagePicture(data);
},
error: function (data, status, e)
{
alert(e);
}
}
)
}else{
$("#msg_error_no_image_message").show();
}
return false;
}

这是删除图片和清除字段的Javascript

function deleteMessageImage(){
//delete the image
var file = $("#image_message_file").val();

if(file != '') {
$.post(siteRegionDir+'lib/immedia/deleteMessagePicture.php',{filename:file}, function(data) {
clearPictureAttachment();
$('#editor-photoarea').hide();//make sure it is hidden
},"html"
);
}else{
clearPictureAttachment();
$('#editor-photoarea').hide();//make sure it is hidden
}
}

function clearPictureAttachment(){
//var control = $("#image-message");
$("#image-message").attr('value', '');
//control.replaceWith( control = control.clone( true ) );//so it resets it all, truw = keep the bound events
$("#image_message_file").attr('value', '');
$("#image_message_loading").hide();
$("#image_message_upload").show();
$("#image_message_preview").hide();
}

任何帮助都会很棒!谢谢!

最佳答案

如果您通常使用 React 或仅使用 javascript,您还可以“重置”事件目标的值。

所以如果你有类似组件的东西可以上传和“删除”图像:

<input type="file" onChange={onChange} />

你的 onChange 可以是:

onChange(event) {

const files = event.target.files;

// your logic here on what to do with files (maybe fetch the preview or something)

// this line right below will reset the
// input field so if you removed it you can re-add the same file
event.target.value = ''
}

关于javascript - 第二次使用输入文件不再触发 onchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643265/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com