这是从哪里来的 当我第一次学习jQuery时,我通常会附加这样的事件: $('.my-widget a').click(function() { $(this).toggleClass('active'); }); 在了解了关于select器速度和事件委托的更多信息之后,我在几处地方读到“jQuery事件委托会让你的代码更快”。 所以我开始写这样的代码: $('.my-widget').on('click','a',function() { $(this).toggleClass('active'); }); 这也是复制已弃用的.live()事件行为的推荐方法。 这对我来说很重要,因为我的许多站点都会dynamic地添加/删除小部件。 上面的行为不像.live()虽然,因为只有添加到已经存在的容器“.my-widget”元素将得到的行为。 如果我在代码运行之后dynamic添加另一个html块,那些元素将不会获取绑定到它们的事件。 喜欢这个: setTimeout(function() { $('body').append('<div class="my-widget"><a>Click does nothing</a></div>'); }, 1000); 我想实现的是: .live()的旧行为//将事件附加到不存在的元素 .on()的好处 最快的性能来绑定事件 简单的方法来pipe理事件 我现在附上所有这样的事件: $(document).on('click.my-widget-namespace', '.my-widget a', function() { $(this).toggleClass('active'); }); 这似乎满足我所有的目标。 (是的,因为某些原因,在IE中速度较慢,不知道为什么?)这样做很快,因为只有一个事件绑定到一个单数元素,次级select器只在事件发生时才被评估(如果这里错了,请纠正我)。 命名空间非常棒,因为它更容易切换事件侦听器。 我的解决scheme/问题 所以我开始认为jQuery事件应该总是绑定到$(document)。 你有什么理由不想这么做吗? 这可以被认为是最佳做法吗? 如果没有,为什么? 如果你已经阅读了这一切,谢谢。 我感谢任何/所有的反馈/见解。 假设: 使用支持.on() //至less1.7版本的jQuery 您希望将事件添加到dynamic添加的内容 读数/例子: http://24ways.org/2011/your-jquery-now-with-less-suck […]
当一些div或input被添加到html时,我想执行一个函数。 这可能吗? 例如,添加一个文本input,然后调用该函数。
我怎样才能收集访问者的时区信息? 我需要时区,以及GMT抵消时间。
我正在寻找一个jQuery插件,可以获取URL参数,并支持这个searchstring,而不会输出JavaScript错误:“格式不正确的URI序列”。 如果没有支持这个的jQuery插件,我需要知道如何修改它来支持这个。 ?search=%E6%F8%E5 URL参数的值在解码时应该是: æøå (字符是挪威语)。 我没有访问服务器,所以我不能修改任何东西。
你如何使用jQuery在文本字段中设置光标位置? 我有一个带有内容的文本字段,并且我希望用户光标在焦点位于特定的偏移位置。 代码应该看起来像这样: $('#input').focus(function() { $(this).setCursorPosition(4); }); 那setCursorPosition函数的实现是什么样的? 如果您的文本字段的内容为abcdefg,则该调用将导致光标的位置如下所示:abcd ** | ** efg。 Java有一个类似的函数setCaretPosition。 有一个类似的方法存在的JavaScript? 更新:我修改了CMS的代码来使用jQuery,如下所示: new function($) { $.fn.setCursorPosition = function(pos) { if (this.setSelectionRange) { this.setSelectionRange(pos, pos); } else if (this.createTextRange) { var range = this.createTextRange(); range.collapse(true); if(pos < 0) { pos = $(this).val().length + pos; } range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } } […]
我一直在尝试重新实现一个像Mozilla Hacks站点上的 HTML5图片上传器,但是它可以和WebKit浏览器一起工作。 部分任务是从canvas对象中提取图像文件,并将其附加到FormData对象上传。 问题是,尽pipecanvas具有toDataURL函数来返回图像文件的表示,但FormData对象只接受来自File API的 File或Blob对象。 Mozilla解决scheme在canvas上使用了以下仅限Firefox的function: var file = canvas.mozGetAsFile("foo.png"); …在WebKit浏览器上不可用。 我能想到的最好的解决scheme是find一种方法将数据URI转换为File对象,我认为这可能是File API的一部分,但是我不能为了我的生活find一些可以做到的事情。 可能吗? 如果没有,还有其他的select 谢谢。
我经常看到带有以美元符号开头的variables的JavaScript。 何时/为什么要select以这种方式为variables添加前缀? (我不是问你在jQuery和其他人看到的$('p.foo')语法,而是像$name和$order这样的普通variables)
问题是,当我调用window.close()或self.close()它不closures窗口。 现在似乎有一种信念,在Chrome中,您不能通过脚本closures任何不是脚本创build的窗口。 这是明显的错误,但不pipe它应该仍然这样做,即使它需要popup一个警报来确认。 这些都没有发生。 所以,有没有人有真正的,function和经过validation的方法来closures一个窗口使用类似于javascript:window.close()或javascript:self.close() ,实际上做预期的事情,并发生在每个浏览器基于Chrome? 任何build议将不胜感激,我正在寻找Javascript特定的解决scheme,没有什么JQuery或第三方的实施。 更新:虽然大部分build议有严重的限制和可用性问题,但是使用脚本头中的// @grant window.close的最新build议(特定于TamperMonkey)通常会在通常不能使用处理closures的方法。 虽然不是完全理想的,并不是每一个案件,这对我来说是一个很好的解决scheme。
我见过“this”这个关键字在一个函数中是如何工作的? ,但我没有看到它回答以下。 鉴于此代码: var MyDate = function(date) { this.date = date; }; var obj1 = { foo: new Date(), bar: new MyDate(this.foo) // this.foo is undefined }; var obj2 = {}; obj2.foo = new Date(); obj2.bar = new MyDate(this.foo); // this.foo is undefined var obj3 = { foo: new Date(), bar: new MyDate(obj3.foo) }; var […]
Javascript中的“for … in”循环是否按照声明的顺序通过hashtables / elements? 有一个浏览器不按顺序吗? 我希望使用的对象将被声明一次 ,永远不会被修改。 假设我有: var myObject = { A: "Hello", B: "World" }; 我进一步使用它们: for (var item in myObject) alert(item + " : " + myObject[item]); 我可以期待'A:'你好''在最合适的浏览器中总是出现在'B:'World''之前吗?