javascript – Jquery事件不触发DOM元素页面加载后创建
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Jquery事件不触发DOM元素页面加载后创建,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3921字,纯文字阅读大概需要6分钟。
内容图文
![javascript – Jquery事件不触发DOM元素页面加载后创建](/upload/InfoBanner/zyjiaocheng/713/7c2153f638c747479e707e783e608361.jpg)
参见英文答案 > jQuery doesn’t work after content is loaded via AJAX 7个
我有一个页面,当html5数字字段被更改时触发calculate()函数我已经绑定了几乎我能想到的每个事件,它适用于最初加载的DOM元素.
但是,如果我在加载dom后添加元素,则不会触发更改功能.
我添加了一个运行calculate()函数的按钮,当单击它时,它将运行新创建的元素以及原始元素.
所以我知道代码可以工作,但事件不是为新创建的dom元素触发.
Jquery触发器
$('.score').change(function() {
calculate();
});
$('.score').bind('keyup mouseup', function() {
calculate();
});
$('.score').mousewheel(function() {
calculate();
});
$('.score').click(function() {
calculate();
});
$('.score').keypress(function() {
calculate();
});
计算功能
function calculate() {
$("tbody tr").each(function() {
row_total = 0;
$(".score", this).each(function() {
row_total += Number($(this).val());
});
$(".total", this).val(row_total);
});
var arr = [];
var row = 0;
$("tbody tr").each(function() {
$(".total", this).each(function() {
arr[row] = $(this).val();
row += 1;
});
});
var sorted = arr.slice().sort(function(a, b) {
return b - a
})
var ranks = arr.slice().map(function(v) {
return sorted.indexOf(v) + 1
});
row = 0;
$("tbody tr").each(function() {
$(".place", this).each(function() {
$(this).val(ranks[row]);
row += 1;
});
});
$("tbody tr").each(function() {
$(".place", this).each(function() {
var p = $(this).val();
switch (p) {
case '1':
$(this).css('background-color', 'gold');
break;
case '2':
$(this).css('background-color', 'silver');
break;
case '3':
$(this).css('background-color', '#8c7853');
break;
case '4':
$(this).css('background-color', 'white');
break;
default:
$(this).css('background-color', 'white');
}
});
});
}
genRow功能
function genRow(i)
{
var x = "";
for (var j = 0; j < i; j++) {
x += '<tr class="competitors">';
x += '<td class="row">';
x += '<input class="name" type="text" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="score" type="number" step="1" min="-100" max="100" value="0" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="score" type="number" step="1" min="-100" max="100" value="0" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="score" type="number" step="1" min="-100" max="100" value="0" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="score" type="number" step="1" min="-100" max="100" value="0" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="score" type="number" step="1" min="-100" max="100" value="0" />';
x += '</td>';
x += '<td class="row">';
x += '<input class="total" type="text" value="0"/>';
x += '</td>';
x += '<td class="row">';
x += '<input class="place" type="text" value="0"/>';
x += '</td>';
x += '</tr>';
}
return x;
}
HTML代码
<body>
<table id="main">
<tr>
<td class="header">
Name
</td>
<td class="header judge">
Judge 1
</td>
<td class="header judge">
Judge 2
</td>
<td class="header judge">
Judge 3
</td>
<td class="header judge">
Judge 4
</td>
<td class="header judge">
Judge 5
</td>
<td class="header btn">
<input id="btn_Total" type="button" value="Total"/>
</td>
<td class="header h_place">
Place
</td>
</tr>
<tr class="competitors">
</tr>
<tr>
<td colspan="7"></td>
<td class="header btn">
<input id="btn_AddRow" type="button" value="Add Row"/>
</td>
</tr>
</table>
</body>
解决方法:
目前您正在使用的是一种直接绑定,它只会在您的代码进行事件绑定调用时附加到页面上存在的元素.
在动态生成元素或操作选择器(如删除和添加类)时,需要使用Event Delegation委托事件方法使用Event Delegation.
即
$(document).on('event','selector',callback_function)
例
$(document).on('click', '.score', function(){
//Your code
alert("clicked me");
});
代替文档,您应该使用最接近的静态容器.
The delegated events have the advantage that they can process events from descendant elements that are added to the document at a later time. By picking an element that is guaranteed to be present at the time the delegated event handler is attached, we can use delegated events to bind the click event to dynamically created elements and also to avoid the need to frequently attach and remove event handlers.
内容总结
以上是互联网集市为您收集整理的javascript – Jquery事件不触发DOM元素页面加载后创建全部内容,希望文章能够帮你解决javascript – Jquery事件不触发DOM元素页面加载后创建所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。