为什么我的第一个截图有效,而我的第二个截图不起作用
Why does my first snippit work, but my second doesn't?
我正在尝试将点击事件转换为jQuery中的新<div />
。 以下截图有效(当我单击div 时,我看到"单击"消息),但是第二个截图不起作用。
谁能告诉我为什么?
工作片段:
'use strict';
(function () {
$(document).ready(function () {
var $display = $('#display'),
$drawingArea = $('<div />')
.attr('id', 'drawing-area')
.click(function() {
alert('clicked');
});
$display.wrap($drawingArea);
})
})();
不起作用的代码段:(警报"就绪"被触发,但不是点击")
'use strict';
(function () {
$(document).ready(function () {
var $display = $('#display'),
$drawingArea = $('<div />')
.attr('id', 'drawing-area');
$display.wrap($drawingArea);
$drawingArea.ready(function() {
alert('ready');
$drawingArea.click(function() {
alert('clicked');
})
});
})
})();
更新
刚刚尝试了以下方法:
(function () {
$(document).ready(function () {
var $display = $('#display'),
$drawingArea = $('<div />')
.attr('id', 'drawing-area');
$display.wrap($drawingArea);
$drawingArea.ready(function() {
alert('ready');
});
$drawingArea.click(function() {
alert('clicked');
})
})
})();
已触发"就绪"警报,但没有"单击"警报。
HTML:
<section id="main">
<svg id="display" xmlns="http://www.w3.org/2000/svg">
</svg>
</section>
更新 2刚刚注意到,当我使用 chrome 开发工具疯狂点击时,在</html
>之前打开了这个应用程序
<div id="gdx-bubble-container">
<div id="gdx-bubble-main" style="left: 0px; top: 1023.4375px;">
<div id="gdx-bubble-close"></div>
<div id="gdx-bubble-query-container" class="gdx-display-block">
<div id="gdx-bubble-query">not</div>
<div id="gdx-bubble-audio-icon" class="gdx-display-block"></div>
<div id="gdx-bubble-query-container-end"></div>
</div>
<div id="gdx-bubble-meaning">Used with an auxiliary verb or “be” to form the negative</div>
<div id="gdx-bubble-options-tip" class="gdx-display-block">Tip: Didn't want this definition pop-up? Try setting a trigger key in <a href="chrome-extension://mgijmajocgfcbeboacabfgobmjgjcoja/options.html" target="_blank">Extension Options</a>.</div>
<div id="gdx-bubble-attribution" class="gdx-display-none">
<a target="_blank"></a>
<div></div>
</div>
<div id="gdx-bubble-more" class="gdx-display-block"><a target="_blank" href="http://www.google.com/search?q=define+not">More »</a></div>
</div>
<div id="gdx-arrow-container">
<div id="gdx-arrow-main" style="top: 1145.4375px; left: 10px;">
<div id="gdx-bubble-arrow-inner-down"></div>
<div id="gdx-bubble-arrow-outer-down"></div>
</div>
</div>
</div>
答案在于.wrap()
的功能:
.wrap() 函数可以接受任何可以传递给 $() 工厂函数的字符串或对象来指定 DOM 结构。此结构可以嵌套几个级别,但应只包含一个最内层的元素。此结构的副本将环绕在匹配元素集中的每个元素周围。
换句话说,当您说$display.wrap($drawingArea);
时,您正在创建$drawingArea
的副本。稍后将 click 事件添加到其中时,它不会添加到实际位于 DOM 中的副本中。
第一个代码段之所以有效,是因为您要在.wrap()
操作之前添加 click 事件,因此 click 事件将与元素的其余部分一起复制。
正如 Juhana (+1) 中指出的那样,换行创建结构的副本,因此您的div $display
不会从对象本身换行。
您可以使用元素$display
的父元素来选择器:
'use strict';
(function () {
$(document).ready(function () {
var $display = $('#display'),
$drawingArea = $('<div />')
.attr('id', 'drawing-area');
$display.wrap($drawingArea);
$display.parent().ready(function() {
alert('ready');
$display.parent().click(function() {
alert('clicked');
})
});
})
})();
演示:http://jsfiddle.net/5ch9W/1/
您在此处缺少分号:
drawingArea.click(function() {
alert('clicked');
});
---^
相关文章:
- 正则表达式与数字中的第二个点匹配
- IE11中的第二个调用取消了第一个Fetch API调用
- Jquery - 将我的两个类相乘没有结果
- setInterval 仅在我的 5 个元素中的 4 个上运行
- 谷歌地图没有显示在带有angularjs的第二个部分视图上
- 我可以通过 Javascript 中第一个元素的值选择二维数组的第二个元素吗?
- 为什么我添加的第二个jQuery代码部分/新的CSS部分导致第一个jQuery代码在我的页面上不起作用
- 为什么我的第一个截图有效,而我的第二个截图不起作用
- 我的第二个函数不是删除父元素
- Backbone.undo.js没有跟踪我的第二个跨度,也没有't保存起始值
- 我如何使用正则表达式在javascript字符串中获得两个日期的第二个
- 固定头不能正常工作与一个版本的jquery代码,为什么我的第二个版本在Firefox中这么慢
- 第二个下拉框取决于我的第一个下拉框.如何去做
- Javascript乘法结果NaN当我按tab键上的第二个值(数字与点和逗号)例如:45,524.25 * 65,25,
- 如果最后一个td(8)有一些内容,我如何将类添加到行中的第二个td
- 我的第二个带有下拉列表的脚本;不起作用
- 有人能告诉我调用参数的第二个生命周期是什么意思吗?
- 我可以在Marionette模块的第二个定义中访问该模块的私有变量吗
- 一旦第一个函数调用了第一个函数内的第二个函数,我将如何将变量的引用传递给第二个函数
- 如何禁用angularjs捕获我的表单提交的第二个提交按钮