在jQuery中绑定一个点击事件到动态创建的对话框
Bind a click event to a dynamically created Dialog in jQuery
小提琴原图
动态创建对话框的失败示例
我用这个脚本将AJAX内容加载到jQuery UI对话框中,这个对话框的类在示例中名为.open_dia
。问题是,我有.open_dia
在一个(window).bind(“load”, function(){} event
动态加载到页面,所以我想知道如何改变这一行从
var $link = $(this).one('click', function(){....
达到
的效果var $link = $('.area').one('click','.open_dia', function() {
以便我可以将事件绑定到动态创建的元素.open_dia
以打开对话框。如有任何帮助,不胜感激。
原始代码:
$(document).ready(function() {
var $loading = $('<img src="http://upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" alt="loading" class="loading">');
$('.open_dia').each(function() {
var $dialog = $('<div></div>')
.append($loading.clone());
var $link = $(this).one('click', function() {
$dialog
.load($link.attr('href') + ' #content')
.dialog({
title: $link.attr('title'),
width: 500,
height: 300
});
$link.click(function() {
$dialog.dialog('open');
return false;
});
return false;
});
});
});
失败代码:$(document).ready(function(){
$('button').one('click',function(){
$(this).next('.area').append('<a class="open_dia" title="this title" href="http://jsfiddle.net/">Click</a>');
});
var $loading = $('<img src="http://upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" alt="loading" class="loading">');
$('.open_dia').each(function() {
var $dialog = $('<div></div>')
.append($loading.clone());
var $link = $('.area').one('click','.open_dia', function() {
$dialog
.load($link.attr('href') + ' #content')
.dialog({
title: $link.attr('title'),
width: 500,
height: 300
});
$link.click(function() {
$dialog.dialog('open');
return false;
});
return false;
});
});
});
HTML例子:
<button>Append open_dia</button>
<div class='area'></div>
你好,我已经fork了你的解决方案,并对你的javascript做了如下修改:
var loading = $('<img src="http://upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" alt="loading" class="loading">');
$(document).ready(function () {
$('button').click(function () {
$(this).next('.area').append('<a class="open_dia" title="this title" href="#">Click</a>');
});
$(document).on('click', '.open_dia', function (evt) {
var dialog = $('<div></div>').append(loading.clone());
dialog.load($(this).attr('href') + ' #content').dialog({
title : $(this).attr('title'),
width : 500,
height : 300
});
dialog.dialog('open');
return false;
});
});
我修改的JS提琴在这里:http://jsfiddle.net/91nc1k1t/2/
如果您希望每个对话框的内容只加载一次,请参阅fork fiddle的更新:http://jsfiddle.net/91nc1k1t/5/
你可以这样做:
<button>Append open_dia</button>
<div class='area'><a style="display: none;" class="open_dia"></a></div>
如果目标DOM element
是动态生成的,则没有问题。要使其工作,请确保在容器元素(动态创建元素的父元素)的click事件上注册了事件处理程序。这将解决这个问题!
相关文章:
- 如何使Javascript动态html表及其上的事件
- JavaScript-动态SVG-onload属性-未触发事件
- 动态创建OnClick事件Javascript
- 如何使用javascript和PHP动态触发onChange事件
- 谷歌地图动态创建的标记点击事件使用相同的标记
- 在动态创建的标记上添加事件
- 使用jQuery动态添加onClick事件
- 将多个事件动态添加到多个 Web 视图
- 将onclick事件动态添加到选择下拉列表中的选项
- 将单击事件动态绑定到列表
- 将事件动态绑定到表行和列
- 在Highcharts上绘制随时间变化的偶发事件(动态精度?)
- 从事件动态设置属性值
- 在Firefox中,使用JS onload事件动态调整图像大小会延迟
- 如何添加onclick事件动态传递一个特定的值
- 将事件动态添加到body>使用JavaScript
- Mithril:在事件/动态上渲染组件
- Angular为事件动态生成的ID locate
- 使用onclick事件动态更改javascript源代码
- 使用onClick事件动态创建表行