Je sais qu'il y a un problème avec get document.getElementById
et IE, mais vous ne savez pas pourquoi IE a un problème avec .remove
et tous les autres navigateurs ne le sont pas. Toute aide ici serait appréciée. Je reçois l'erreur
SCRIPT438: Object doesn't support property or method 'remove'
à partir de la console d'erreur. Le Javascript fonctionne dans tous les autres navigateurs.
Voici le code:
<script type="text/javascript"><!--
function removeModule() {
<?php $tab = 1; ?>
var module_row = <?php echo $module_row; ?>;
if(!confirm('Are you sure?'))
{
return false;
}
var x = 1;
while (x < module_row)
{
if (document.getElementById('tab-' + x).checked)
{
document.getElementById('tab-' + x).remove();
document.getElementById('module-' + x).remove();
document.getElementById('tab-module-' + x).remove();
}
x++;
<?php $tab++; ?>
}
$('#form').submit();
}
//--></script>
C'est à partir d'un module opencart, c'est le fichier tpl. J'ai également inclus une partie du fichier ici, donc j'espère que quelqu'un pourra repérer l'erreur.
<?php echo $header; ?>
<div id="content">
<div class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
<?php } ?>
</div>
<?php if ($error_warning) { ?>
<div class="warning"><?php echo $error_warning; ?></div>
<?php } ?>
<div class="box">
<div class="heading">
<h1><img src="view/image/module.png" alt="" /> <?php echo $heading_title; ?></h1>
<div class="buttons">
<a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a>
<a onclick="removeModule();" class="button"><?php echo $button_delete ?></a>
<a onclick="location = '<?php echo $cancel; ?>';" class="button"><?php echo $button_cancel; ?></a></div>
</div>
<div class="content">
<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
<div class="vtabsQS">
<?php $module_row = 1; ?>
<?php foreach ($modules as $module)
{ ?>
<div style="margin-left: -7px; float:left;">
<input type="checkbox" style="float: left; margin-top: 8px;" id="tab-<?php echo $module_row; ?>" onClick="" value="#tab-<?php echo $module_row; ?>" />
<a href="#tab-module-<?php echo $module_row; ?>" id="module-<?php echo $module_row; ?>">
<?php foreach ($languages as $language)
{ ?>
<label class="inputLrgTab"><?php if (!empty($module['language_id'][$language['language_id']])) { echo $module['language_id'][$language['language_id']];} ?></label>
<?php } ?>
</a><br />
</div>
<?php $module_row++; ?>
<?php } ?>
<span id="module-add" style="clear: both; margin-left: -7px;"><?php echo $button_add_module; ?> <img src="view/image/add.png" alt="" onclick="addModule();" /></span>
</div>
<?php $module_row = 1; ?>
<?php foreach ($modules as $module) { ?>
<div id="tab-module-<?php echo $module_row; ?>" class="vtabs-content" style="margin-left:230px;">
<table class="form">
<tr>
<td><?php echo $entry_title; ?></td>
<td class="left">
<?php foreach ($languages as $language) { ?>
<img src="view/image/flags/<?php echo $language['image']; ?>" alt="<?php echo $language['name']; ?>" />
<input class="inputLrg" type="text" name="<?php echo $classname; ?>_module[<?php echo $module_row; ?>][language_id][<?php echo $language['language_id']; ?>]" value="<?php if (!empty($module['language_id'][$language['language_id']])) { echo $module['language_id'][$language['language_id']];} ?>">
<br />
<?php } ?>
<span class="error"><?php echo $error_title; ?></span>
</td>
</tr>
<tr>
<td><?php echo $entry_limit; ?></td>
remove()
comme méthode sur HTMLElements est malheureusement non supporté par Internet Explorer .
Vous pouvez utiliser la solution de contournement dans this SO answer pour une solution javascript Vanilla.
Cependant, comme vous semblez déjà utiliser jQuery, remplacez plutôt
document.getElementById('tab-' + x).remove();
avec
$('#tab-' + x).remove();
Vous devez obtenir le parent de l'élément que vous essayez de supprimer et utiliser la méthode child remove pour rechercher et supprimer l'élément
element.parentNode.removeChild(element);
cela fonctionne dans tous les navigateurs, y compris IE.
Vous devez utiliser ceci
element.parentElement.removeChild(element);
Pris en charge par tous les navigateurs et présente également certains avantages par rapport à un simple piratage pour supprimer l'élément enfant.
Voici une autre solution de contournement pour continuer à utiliser la fonction .remove()
Element.prototype.remove = function() {
this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
for(var i = this.length - 1; i >= 0; i--) {
if(this[i] && this[i].parentElement) {
this[i].parentElement.removeChild(this[i]);
}
}
}
Et puis vous pouvez supprimer des éléments comme celui-ci
document.getElementById("my-element").remove();
ou
document.getElementsByClassName("my-elements").remove();
Voici le lien Stack Overflow pour plus d'informations, également source de cette réponse.
Il semble que IE10 génère également cette erreur.
Voici une façon dont j'ai essayé d'utiliser la propriété objets outerHTML
:
if(typeof document.getElementById('id').remove=='function'){
//If support is found
document.getElementById('id').remove()
}
else{
//If not
document.getElementById('id').outerHTML='';
}