以上就是给各位分享用AJAX加载html后,为什么jQuery更改功能不起作用?,其中也会对ajax加载html页面进行解释,同时本文还将给你拓展ajax加载html文件、Ajax加载后,引导程序切换
以上就是给各位分享用AJAX加载html后,为什么jQuery更改功能不起作用?,其中也会对ajax加载html页面进行解释,同时本文还将给你拓展ajax加载html文件、Ajax加载后,引导程序切换不起作用、javascript – jQuery没有处理AJAX加载的html内容、javascript – jQuery:为什么这个动画步骤功能不起作用?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 用AJAX加载html后,为什么jQuery更改功能不起作用?(ajax加载html页面)
- ajax加载html文件
- Ajax加载后,引导程序切换不起作用
- javascript – jQuery没有处理AJAX加载的html内容
- javascript – jQuery:为什么这个动画步骤功能不起作用?
用AJAX加载html后,为什么jQuery更改功能不起作用?(ajax加载html页面)
我加载表单并通过AJAX从PHP文件中动态填充选择。在实现动态的AJAX填充选择之前,我的change函数起作用(当用户选择“
other”时,它仅显示另一个输入)。现在,更改功能不起作用。
我知道ready函数正在触发,因为jStepper函数正在运行。我已经在ready函数的内部和外部使用change函数进行了尝试。我感觉在AJAX获取完成之前加载了change函数,但这真的重要吗?
var types = "<select name=''ve_categoryNo'' id=''ve_categoryNo''>";var d = new Date();$.get(''scripts/vehicle_category_feed.php?date='' + d.getTime(), function ($type){ $($type).find(''type'').each(function () { types += "<option value=''" + $(this).attr("categoryno") + "''>" + $(this).attr("category") + "</option>"; }); types += "<option value=''other''>Other(Specify)</option></select>"; $(''#ve_categoryNo_td'').html(types);});$(document).ready(function (){ $(''input[type=text]'').click(function () { $(this).select(); }); $(''#vehicle_entry'').ajaxForm(function () { showMessage(''vehicle_information_added''); }); $(''#ve_ariNo'').jStepper({minValue: 1, maxValue: 99999999}); $(''#ve_fleetNo'').jStepper({minValue: 1, maxValue: 999999999}); $(''#ve_vehicleYear'').jStepper(); $(''#ve_purchasePrice'').jStepper({minValue: 0}); $(''#ve_categoryNo'').change(function () { if ((this.value) == "other") { $(''#otherCategory'').show(); $(''#otherCategory input[type=text]'').focus(); } else { $(''#otherCategory'').hide(); } });});
答案1
小编典典修改此:
$(''#ve_categoryNo'').change(function() {
至
$(document).on(''change'', ''#ve_categoryNo'', function() {
EDIT3:在更仔细地检查您的代码后,这将表现最佳:
$(''#ve_categoryNo_td'').on(''change'', ''#ve_categoryNo'', function() {
因为它最靠近所讨论的元素。
您还应该将ajax调用放入我认为的就绪脚本中。
发生这种情况的原因是,在实例化DOM时,没有任何内容要绑定。以这种方式使用.on会将其绑定到文档。如果您有另一个“固定”元素来包装它,则最好使用该元素代替“文档”来绑定该元素,因为它可能会更好。
编辑:请注意,在将元素作为ajax调用完成的一部分注入后,您也可能会添加更改事件管理,但是如果多次执行此操作,则在这种情况下应首先将其解除绑定。
EDIT2:由于存在问题/评论:从文档:http :
//api.jquery.com/on/
在文档树的顶部附近附加许多委托的事件处理程序可能会降低性能。每次事件发生时,jQuery必须将该类型所有附加事件的所有选择器与从事件目标到文档顶部的路径中的每个元素进行比较。为了获得最佳性能,请在尽可能靠近目标元素的文档位置附加委托事件。避免在大型文档上的委托事件中过度使用document或document.body。
ajax加载html文件
分析
加载一个html
的话是可以分为加载其中某个块(div
)和加载整个页面,而不管加载其中任何一种都是需要本页面的一个块(div
)来进行加载展示。加载的方法可以是$(ajax{})
方法也可以是 $(''#div'').load()
方法,下面为大家演示一下
实操
index.html
<div id="router">
</div>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<section>
<div>ss</div>
<div id="warp">11</div>
<div>22</div>
</section>
<script>
$(''#router'').css(''color'',''red'');
</script>
预期效果
index.html (load方法和$(ajax)效果一致)
1、加载整个页面
<script>
$.ajax({
url:''./test.html'',
type:''get'',
success:function(res){
$(''#router'').html($(res));
}
});
// $(''#router'').load(''./test.html'');
</script>
2、加载部分内容
<script>
$.ajax({
url:''./test.html'',
type:''get'',
success:function(res){
var html = $(res).find(''.warp'');
$(''#router'').html(html);
}
});
// $(''#router'').load(''./test.html .warp'');
</script>
这里呢可以看到只是加载了text.html
中 <div></div>
的内容,js
部分并不会被加载
<script>
$.ajax({
url:''./test.html'',
type:''get'',
success:function(res){
var html = $(res).find(''#warp'');
$(''#router'').html(html);
}
});
// $(''#router'').load(''./test.html #warp'');
</script>
Ajax加载后,引导程序切换不起作用
我正在使用ajax加载来获取页面上的某些内容。我正在使用引导程序3和引导程序切换。加载内容时,bootstrap
3内容运行良好(您可以清楚地看到面板panel-
primary)。但是引导加载内容不会被加载(您只能看到一些复选框)。annyone知道如何使它正常工作吗?还是我应该注意其他一些拨动开关?如果是哪一个?
编辑:我还没有测试出事件绑定,因为我无法使引导切换CSS在Ajax加载的代码上工作。事件绑定与CSS无关吗?
- 主要html代码使用的脚本(带有ajax加载的脚本)
- 主要的html代码
- 主HTML代码将代码加载到div中
<!-- jQuery --> <script src="../bower_components/jquery/dist/jquery.min.js"></script> <!-- Bootstrap Core JavaScript --> <script src="../bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <!-- Bootstrap Toggle JavaScript --> <script src="../bower_components/bootstrap-toggle-master/js/bootstrap-toggle.min.js"></script> <!-- Metis Menu Plugin JavaScript --> <script src="../bower_components/metisMenu/dist/metisMenu.js"></script> <!-- Custom Theme JavaScript --> <script src="../dist/js/sb-admin-2.js"></script> <!-- Custom Domotica JavaScript --> <script> $(document).ready(function(){ // Set trigger and container variables var trigger = $(''#side-menu li ul li a''), container = $(''#page-wrapper''); // Fire on click trigger.on(''click'', function(){ // Set $this for re-use. Set target from data attribute var $this = $(this), target = $this.data(''target''); alert("target: " + target) // Load target page into container container.load(target + ''.html'', function (response, status, xhr) {}); // Stop normal link behavior return false; }); }); </script> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Home automation web page"> <meta name="author" content=""> <title>Home</title> <!-- Bootstrap Core CSS --> <link href="../bower_components/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- Bootstrap toggle --> <link href="../bower_components/bootstrap-toggle-master/css/bootstrap-toggle.min.css" rel="stylesheet"> <!-- MetisMenu CSS --> <link href="../bower_components/metisMenu/dist/metisMenu.min.css" rel="stylesheet"> <!-- Custom CSS --> <link href="../dist/css/sb-admin-2.css" rel="stylesheet"> <!-- Custom Fonts --> <link href="../bower_components/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn''t work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> </head> <body> <div id="wrapper"> <!-- Navigation --> <navrole="navigation"> <div> <button type="button"data-toggle="collapse" data-target=".navbar-collapse"> <span>Toggle navigation</span> <span></span> <span></span> <span></span> </button> <ahref="index.html">Home</a> </div> <!-- /.navbar-header --> <ul> <li> <adata-toggle="dropdown" href="#"> <i></i> <i></i> </a> <ul> <li> <a href="#"> <div> <i></i> Failure <span>No respons from Controller 1</span> </div> </a> </li> </ul> <!-- /.dropdown-alerts --> </li> <!-- /.dropdown --> <li> <adata-toggle="dropdown" href="#"> <i></i> </a> <!-- /.dropdown-user --> </li> <!-- /.dropdown --> <li> <adata-toggle="dropdown" href="#"> <i></i> </a> </li> <!-- /.dropdown --> </ul> <!-- /.navbar-top-links --> <divrole="navigation"> <div> <ulid="side-menu"> <li> <a href="index"><i></i> House<span></span></a> <ul> <li> <a href="#">Weather</a> </li> <li> <a href="#">Energy</a> </li> <li> <a href="#">Water</a> </li> </ul> </li> <li> <a href="#"><i></i> 1st floor<span></span></a> <ulid="side-menu2"> <li> <a href="#" data-target="index">Hallway</a> </li> <li> <a href="#">Main bedroom</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="#"><i></i> main floor<span></span></a> <ul> <li> <a href="#">Kitchen</a> </li> <li> <a href="#">Living room</a> </li> <li> <a href="#">Garage</a> </li> </ul> <!-- /.nav-second-level --> </li> <li> <a href="#"><i></i> Basement</a> <!-- /.nav-second-level --> </li> <li> <a href="#"><i></i> Garden</a> <!-- /.nav-second-level --> </li> </ul> </div> <!-- /.sidebar-collapse --> </div> <!-- /.navbar-static-side --> </nav> <div id="page-wrapper"> </div> <!-- /#page-wrapper --> </div> <!-- /#wrapper --> </body> </html> <divid="switchespanel"> <div> <h3>Switches</h3> </div> <div> <table> <tr> <th>Location</th> <th>State</th> </tr> <tr> <td>Testswitch0</td> <td> <label> <input type="checkbox" data-toggle="toggle" data-onid="S0" data-size="mini"> </label> </td> </tr> </table> </div> </div>
答案1
小编典典确保正确加载bootstrap-toggle js文件和css文件。专门检查它们是否在链接指向的位置,甚至使用下面列出的CDN版本:
<link href="https://gitcdn.github.io/bootstrap-toggle/2.2.0/css/bootstrap-toggle.min.css" rel="stylesheet"><script src="https://gitcdn.github.io/bootstrap-toggle/2.2.0/js/bootstrap-toggle.min.js"></script>
您的路径必须是错误的,或者您忘记了完全包含js文件,并且您应该在控制台中看到关于此的警告,因为否则代码可以正常工作。
关于动态加载的内容。
第一个元素起作用是因为在html首次加载后,会bootstrap-toggle.min.js
查找具有该属性的所有元素,data-toggle="toggle"
然后调用.bootstrapToggle()
它们以应用插件。这仅在页面加载时发生。
如果以后添加更多切换,则需要通过自己进行初始化.bootstrapToggle()
。我更新了下面的示例,以模拟动态添加切换,并说明我将采用的方法。有关更多详细信息,请参见代码中的注释。
// timeout to simulate ajaxsetTimeout(function(){ // add an element dynamically, $(''.table'').append(''<tr><td>Testswitch0</td><td><label><input type="checkbox" data-toggle="toggle" data-onid="S2" data-size="mini"></label></td></tr>''); // now that we have dynamically loaded elements // we need to initialize any toggles that were added // you shouldn''t re-initialize any toggles already present // but we also do want to have to figure out how to find the ones we added // instead, we''ll destroy all toggles and recreate all new ones $("[data-toggle=''toggle'']").bootstrapToggle(''destroy'') $("[data-toggle=''toggle'']").bootstrapToggle();}, 2000)<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"><link href="https://gitcdn.github.io/bootstrap-toggle/2.2.0/css/bootstrap-toggle.min.css" rel="stylesheet"><script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script><script src="https://gitcdn.github.io/bootstrap-toggle/2.2.0/js/bootstrap-toggle.min.js"></script><divid="switchespanel"> <div> <h3>Switches</h3> </div> <div> <table> <tr> <th>Location</th> <th>State</th> </tr> <tr> <td>Testswitch0</td> <td><label> <input type="checkbox" data-toggle="toggle" data-onid="S0" data-size="mini"> </label></td> </tr> <tr> <td>Testswitch0</td> <td><label> <input type="checkbox" data-toggle="toggle" data-onid="S1" data-size="mini"> </label></td> </tr> </table> </div></div>
javascript – jQuery没有处理AJAX加载的html内容
我有一个PHP管理仪表板,其中使用了bootstrap主题.我们知道它有内置的jQuery对象,如下拉菜单,折叠,制表符等等.如果我们刚刚添加了bootstrap js文件,它们都可以工作.
现在问题是当我从ajax调用获取内容并将其显示在我的页面上时,通过ajax加载的所有javascript控件都无法正常工作.
我使用这个ajax调用显示所有内页.所以它可能对加载的HTML有任何bootstrap javascript控件.
那么如何在每个ajax调用上动态修复此问题.我的ajax加载javascript在下面
$('a').bind('click',function(event){
event.preventDefault();
$.get(this.href,{},function(response){
$('#app-content-body').html(response)
});
});
注意:我的问题不在上面的代码中.当我从上面的代码加载html内容时,实际问题是bootstrap javascript控件无法正常工作
解决方法:
jQuery在运行时只知道页面中的元素,因此添加到DOM的新元素无法被jQuery识别.为了解决这个问题,使用event delegation,将新添加的项目中的事件冒泡到jQuery在页面加载时运行时在DOM中的某个点.许多人使用文档作为捕获冒泡事件的地方,但没有必要在DOM树上高高举起.理想情况下you should delegate to the nearest parent that exists at the time of page load.
如果您的jQuery版本支持,请将您的click事件更改为on();
$(document).on('click', 'a', function(event){
如果您使用的是早于1.7版的jQuery,请使用delegate():
$('body').delegate('a' , 'click', function() {
注意运算符顺序,它们与on()读取不同的逻辑更多.
javascript – jQuery:为什么这个动画步骤功能不起作用?
我正在使用this Stackoverflow Question中建议的方法,使用animate重新创建jQuery slideDown函数,以便我可以使用step属性.
但是,我无法使步骤属性起作用.这是我的代码:
infoClone.animate({
"height": "show",
"marginTop": "show",
"marginBottom": "show",
"paddingTop": "show",
"paddingBottom": "show",
step : function() {
console.log('Step!');
}
});
解决方法:
试试这个:
infoClone.animate({
"height": "show",
"marginTop": "show",
"marginBottom": "show",
"paddingTop": "show",
"paddingBottom": "show"
},
{
step : function() {
console.log('Step!');
}
});
我们今天的关于用AJAX加载html后,为什么jQuery更改功能不起作用?和ajax加载html页面的分享已经告一段落,感谢您的关注,如果您想了解更多关于ajax加载html文件、Ajax加载后,引导程序切换不起作用、javascript – jQuery没有处理AJAX加载的html内容、javascript – jQuery:为什么这个动画步骤功能不起作用?的相关信息,请在本站查询。
本文标签: