Javascript JQuery.replaceWith()突然将新元素放错了位置?

Javascript JQuery.replaceWith()突然将新元素放错了位置?,javascript,jquery,file,input,replacewith,Javascript,Jquery,File,Input,Replacewith,这件事真让我困惑。我正在使用replaceWith()来“清除”文件输入字段。然而,当它替换它时,它会将它放回错误的位置,我不知道为什么。我在标题中使用了“突然”一词,因为更神秘的是,当我周末停止工作时,替代者完全按照预期工作。现在我又回去工作了,但突然之间就不是了 以下是调用replaceWith()之前的源HTML: 删除当前音频? 将替换当前音频 请注意,它现在位于另一个DIV的下方和内部几行 以下是控制“清除”按钮操作的脚本: $("#clear_audio_input").live(

这件事真让我困惑。我正在使用
replaceWith()
来“清除”文件输入字段。然而,当它替换它时,它会将它放回错误的位置,我不知道为什么。我在标题中使用了“突然”一词,因为更神秘的是,当我周末停止工作时,替代者完全按照预期工作。现在我又回去工作了,但突然之间就不是了

以下是调用
replaceWith()
之前的源HTML:

删除当前音频? 将替换当前音频

请注意,它现在位于另一个DIV的下方和内部几行

以下是控制“清除”按钮操作的脚本:

$("#clear_audio_input").live("click", function() {
    $("input[name='source_audio']").replaceWith($("input[name='source_audio']").val('').clone(true));
    $("#source_audio_value").val($("#current_audio_source").text());
    $(this).hide();
    $("#current_audio_info_a").show();
    $("#current_audio_info_b").hide();
    checkRequiredMedia();
    return false;
});
以下是基本的预期工作流程。加载时,“清除”按钮隐藏,因为没有任何内容需要清除。用户选择文件后,将显示“清除”按钮。单击该按钮将清除文件输入(通过替换它),然后该按钮将再次隐藏,基本上将表单返回到加载时的状态


发生这种奇怪现象的原因是什么(特别是因为几天前没有发生这种情况,从那以后我什么都没有改变)?

问题是因为您有两个名为
source\u audio
的输入。要解决这个问题,您需要为两个输入字段提供一个id,或者更改名称

例如:

$('#my_file_input').replaceWith('<input id="my_file_input" type="file" name="source_audio" />');
$('#my_hidden_file_input').val('');
$('my#u file_input')。替换为('';
$('#我的_隐藏的_文件_输入').val('';

问题是因为您有两个名为
源音频的输入。要解决这个问题,您需要为两个输入字段提供一个id,或者更改名称

例如:

$('#my_file_input').replaceWith('<input id="my_file_input" type="file" name="source_audio" />');
$('#my_hidden_file_input').val('');
$('my#u file_input')。替换为('';
$('#我的_隐藏的_文件_输入').val('';

这与简单地调用
$(“输入[name='source\u audio']”)val(“”)
有何不同?至少在IE中,文件输入字段是只读的,所以您不能用这种方式清除它。需要拆下并更换整个元件。这是我在下面的Stack上学到的。这与简单地调用
$(“input[name='source\U audio']”)val(“”)
有何不同?至少在IE中,文件输入字段是只读的,所以不能用这种方式清除它。需要拆下并更换整个元件。这是我在Stack Overlow中学到的东西,我从来没听说过。这很有道理,尽管这并不能解释为什么它以前能工作而现在不能。好眼力。我很高兴我在这里发帖。让我重新命名输入,确保一切正常。如果是的话,这个答案是可以接受的。更改了输入名称并更新了其他一些东西,现在它可以正常工作了。嘘。非常感谢。真不敢相信我错过了,但它确实发生了。很高兴你能让它工作。按名称选择输入字段也总是让我感到不舒服。我从来没有注意到这一点。这很有道理,尽管这并不能解释为什么它以前能工作而现在不能。好眼力。我很高兴我在这里发帖。让我重新命名输入,确保一切正常。如果是的话,这个答案是可以接受的。更改了输入名称并更新了其他一些东西,现在它可以正常工作了。嘘。非常感谢。真不敢相信我错过了,但它确实发生了。很高兴你能让它工作。按名称选择输入字段也总是让我很反感。
$('#my_file_input').replaceWith('<input id="my_file_input" type="file" name="source_audio" />');
$('#my_hidden_file_input').val('');