Eu tenho um modal bootstrap 2.32 que estou tentando inserir dinamicamente no HTML de outro modo de exibição. Estou trabalhando com Codeigniter 2.1. Depois de inserir dinamicamente uma visualização parcial modal de bootstrap em uma visualização , eu tenho:
<div id="modal_target"></div>
como o div de destino para inserção. Tenho um botão em minha visualização que se parece com:
<a href="#message" class="btn btn-large btn-info" data-action="Message" data-toggle="tab">Message</a>
Meu JS tem:
$.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();
}
}
});
O botão da visualização principal é:
<div id="thanks"><p><a data-toggle="modal" href="#form-content" class="btn btn-primary btn-large">Modal powers, activate!</a></p></div>
Aqui está o que eu gostaria de armazenar separadamente como uma visualização 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>
Quando clico no botão, o modal é inserido corretamente, mas recebo o seguinte erro:
TypeError: $(...).modal is not a function
Como posso consertar isso?
javascript
jquery
css
twitter-bootstrap
twitter-bootstrap-2
user1592380
fonte
fonte
jQuery(...).modal
. seu jQuery pode estar em modo de compatibilidade, verifique também se o jQuery não está incluído duas vezes.jQuery('#form-content').modal();
Respostas:
eu só quero enfatizar o que mwebber disse no comentário:
:)
foi o problema para mim
fonte
Este erro é realmente o resultado de você não incluir o javascript do bootstrap antes de chamar a
modal
função. Modal é definido em bootstrap.js, não em jQuery. Também é importante notar que o bootstrap realmente precisa do jQuery para definir amodal
função, portanto, é vital que você inclua o jQuery antes de incluir o javascript do bootstrap. Para evitar o erro, certifique-se de incluir o jQuery e o javascript do bootstrap antes de chamar amodal
função. Normalmente faço o seguinte na minha tag de cabeçalho:fonte
Depois de vincular seu jquery e bootstrap, escreva seu código logo abaixo das tags Script de jquery e bootstrap.
fonte
Verifique se a
jquery
biblioteca não incluída no html que carrega viaAjax
.remove<script src="~/Scripts/jquery[ver].js"></script>
noAjaxUpdate/get_modal
fonte
Outra possibilidade é que um dos outros scripts incluídos por você esteja causando o problema por também incluir JQuery ou entrar em conflito com $. Tente remover os outros scripts incluídos e veja se isso corrige o problema. No meu caso, depois de horas de pesquisa desnecessária em meu único código, removi scripts em um padrão de pesquisa binária e descobri o script ofensivo imediatamente.
fonte
Resolvi esse problema em reagir usando-o assim.
fonte
Corre
no projeto para adicionar os tipos jquery em seu projeto Angular. Depois disso, inclua
em seu app.module.ts
Adicionar
em seu index.html logo antes da tag de fechamento do corpo.
E se você estiver executando o Angular 2-7, inclua "jquery" no campo de tipos do arquivo tsconfig.app.json.
Isso removerá todos os erros de 'modal' e '$' em seu projeto Angular.
fonte
Na minha experiência, provavelmente isso aconteceu com conflitos de versão do jquery (usando várias versões), para resolver o problema, podemos usar um método sem conflito como abaixo.
fonte
Resolvi esse problema no Laravel modificando a linha abaixo em
resources\assets\js\bootstrap.js
para
fonte
No meu caso, eu uso o framework Rails e exijo o jQuery duas vezes. Acho que é uma razão possível.
Você pode primeiro verificar o arquivo app / assets / application.js. Se jquery e bootstrap-sprockets forem exibidos, não há necessidade de uma segunda biblioteca. O arquivo deve ser semelhante a este:
Em seguida, verifique app / views / layouts / application.html.erb e remova o script para exigir jquery. Por exemplo:
Acho que às vezes, quando os novatos usam vários exemplos de código do tutorial, isso pode causar esse problema.
fonte
Para mim, eu tinha
//= require jquery
depois//= require bootstrap
. Depois que movi o jquery antes do bootstrap, tudo funcionou.fonte
Eu tive o mesmo problema. Mudando
para
não funcionou. Mas então descobri que o jQuery foi incluído duas vezes e a remoção de um deles resolveu o problema.
fonte
Outras respostas não funcionam para mim em meu aplicativo react.js, então usei JavaScript simples para isso.
A solução abaixo funcionou:
Possivelmente você pode gerar o mesmo clique no botão Fechar, usando também o jQuery.
Espero que ajude.
fonte
Eu acho que você deveria usar no seu botão
em vez de href deve haver data-target
apenas certifique-se de que o conteúdo modal já está carregado
Acho que o problema é que mostrar modal é chamado duas vezes, uma na chamada ajax, funciona bem, você disse que o modal é mostrado corretamente, mas o erro provavelmente vem com a ação init nesse botão, que deve lidar com modal, essa ação não pode ser executada, porque modal não está carregado naquele momento.
fonte