Tengo un modal de bootstrap 2.32 que estoy tratando de insertar dinámicamente en el HTML de otra vista. Estoy trabajando con Codeigniter 2.1. Después de insertar dinámicamente una vista parcial modal de arranque en una vista , tengo:
<div id="modal_target"></div>
como div de destino para la inserción. Tengo un botón en mi vista que se parece a:
<a href="#message" class="btn btn-large btn-info" data-action="Message" data-toggle="tab">Message</a>
Mi JS tiene:
$.ajax({
type : 'POST',
url : "AjaxUpdate/get_modal",
cache : false,
success : function(data){
if(data){
$('#modal_target').html(data);
//This shows the modal
$('#form-content').modal();
}
}
});
El botón de la vista principal es:
<div id="thanks"><p><a data-toggle="modal" href="#form-content" class="btn btn-primary btn-large">Modal powers, activate!</a></p></div>
Esto es lo que me gustaría almacenar por separado como una vista parcial:
<div id="form-content" class="modal hide fade in" style="display: none;">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>Send me a message</h3>
</div>
<div class="modal-body">
<form class="contact" name="contact">
<fieldset>
<!-- Form Name -->
<legend>modalForm</legend>
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="user">User</label>
<div class="controls">
<input id="user" name="user" type="text" placeholder="User" class="input-xlarge" required="">
<p class="help-block">help</p>
</div>
</div>
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="old">Old password</label>
<div class="controls">
<input id="old" name="old" type="text" placeholder="placeholder" class="input-xlarge">
<p class="help-block">help</p>
</div>
</div>
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="new">New password</label>
<div class="controls">
<input id="new" name="new" type="text" placeholder="placeholder" class="input-xlarge">
<p class="help-block">help</p>
</div>
</div>
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="repeat">Repeat new password</label>
<div class="controls">
<input id="repeat" name="repeat" type="text" placeholder="placeholder" class="input-xlarge">
<p class="help-block">help</p>
</div>
</div>
</fieldset>
</form>
</div>
<div class="modal-footer">
<input class="btn btn-success" type="submit" value="Send!" id="submit">
<a href="#" class="btn" data-dismiss="modal">Nah.</a>
</div>
</div>
Cuando hago clic en el botón, el modal se inserta correctamente, pero aparece el siguiente error:
TypeError: $(...).modal is not a function
¿Cómo puedo arreglar esto?
javascript
jquery
css
twitter-bootstrap
twitter-bootstrap-2
usuario1592380
fuente
fuente
jQuery(...).modal
. su jQuery puede estar en modo de compatibilidad, también verifique si jQuery no se incluye dos veces.jQuery('#form-content').modal();
Respuestas:
Solo quiero enfatizar lo que dijo mwebber en el comentario:
:)
fue el problema para mi
fuente
Este error es en realidad el resultado de que no incluyó el javascript de bootstrap antes de llamar a la
modal
función. Modal se define en bootstrap.js, no en jQuery. También es importante tener en cuenta que bootstrap realmente necesita jQuery para definir lamodal
función, por lo que es vital que incluya jQuery antes de incluir el javascript de bootstrap. Para evitar el error, asegúrese de incluir jQuery y luego el javascript de bootstrap antes de llamar almodal
función. Normalmente hago lo siguiente en mi etiqueta de encabezado:fuente
Después de vincular su jquery y bootstrap, escriba su código justo debajo de las etiquetas de script de jquery y bootstrap.
fuente
Verifique esa
jquery
biblioteca no incluida en html que se carga a través deAjax
.remove<script src="~/Scripts/jquery[ver].js"></script>
en suAjaxUpdate/get_modal
fuente
Otra posibilidad es que uno de los otros scripts que incluye esté causando el problema al incluir también JQuery o entrar en conflicto con $. Intente eliminar sus otros scripts incluidos y vea si soluciona el problema. En mi caso, después de horas de buscar innecesariamente mi único código, eliminé los scripts en un patrón de búsqueda binaria y descubrí el script ofensivo de inmediato.
fuente
He resuelto este problema en reaccionar usándolo así.
fuente
correr
en el proyecto para agregar los tipos de jquery en su Proyecto Angular. Después de eso incluye
en su app.module.ts
Añadir
en su index.html justo antes de la etiqueta de cierre del cuerpo.
Y si está ejecutando Angular 2-7, incluya "jquery" en el campo de tipos del archivo tsconfig.app.json.
Esto eliminará todos los errores de 'modal' y '$' en su proyecto Angular.
fuente
En mi experiencia, lo más probable es que haya sucedido con los conflictos de la versión jquery (usando múltiples versiones), para solucionar el problema, podemos usar un método sin conflictos como el siguiente.
fuente
Resolví este problema en Laravel modificando la línea a continuación en
resources\assets\js\bootstrap.js
a
fuente
En mi caso, uso el framework rails y requiero jQuery dos veces. Creo que esa es una posible razón.
Primero puede verificar el archivo app / assets / application.js. Si aparecen jquery y bootstrap-sprockets, entonces no es necesario que se requiera una segunda biblioteca. El archivo debería ser similar a esto:
Luego verifique app / views / layouts / application.html.erb y elimine el script para requerir jquery. Por ejemplo:
Creo que a veces, cuando los novatos usan varios ejemplos de código de tutorial, esto causa este problema.
fuente
Para mí, tuve
//= require jquery
después//= require bootstrap
. Una vez que moví jquery antes de bootstrap, todo funcionó.fuente
Tuve el mismo problema. Cambiando
a
no funcionó. Pero luego descubrí que jQuery se incluyó dos veces y eliminar uno de ellos solucionó el problema.
fuente
Otras respuestas no me funcionan en mi aplicación react.js, por lo que he usado JavaScript simple para esto.
La siguiente solución funcionó:
Posiblemente podría generar el mismo clic en el botón de cierre, usando jQuery también.
Espero que ayude.
fuente
Supongo que deberías usar en tu botón
en lugar de href debería haber data-target
solo asegúrate de que el contenido modal ya esté cargado
Creo que el problema es que mostrar modal se llama dos veces, una en la llamada ajax, que funciona bien, dijiste que modal se muestra correctamente, pero el error probablemente viene con la acción init en ese botón, que debería manejar modal, esta acción no se puede ejecutar, porque modal no está cargado en ese momento.
fuente