Tag: JavaScript

find警告源的最佳方法:传递给getElementById()的空string

警告:空string传递给getElementById()。 源文件:chrome://browser/content/browser.xul 行:0 前几天我开始在开发我的网站时得到上述信息。 事情是按照他们应该(或者至less我认为他们是)工作,但是我想知道这是从哪里来的。 我使用jQuery,所以不要直接使用getElementById() 。 另外我有Firebug和Web Developer扩展程序,用于运行Firefox。 我可以费力地在代码中检查给jQueryselect的空string,或者也许看看jQuery本身,但我的技能是最小的,所以我在这里问,如果有人有一个好主意快速find源警告消息。

如何为ui-bootstrap datepicker创build一个angularJs包装指令?

我正在使用ui.bootstrap.datepicker指令来显示一些date字段。 然而,大多数时候我需要相同的设置:我希望它带有一个popup式窗口和一个popup式button,同时我也想要德文名称作为文本。 这确实为button和文本和格式一遍又一遍地创build相同的代码,所以我写了自己的指令,以防止自己重复自己。 我的指令是一个plunkr 。 但是,我似乎做错了。 如果你selectdateselect器使用“date1”datepicker不使用我的指令一切工作正常。 我期望date2相同,但不是根据我在input字段(或任何其他值我预期)提供的模板显示date,而是显示date对象的.toString()表示forms(例如Fri Apr 03 2015 00:00:00 GMT+0200 (CEST) )。 这是我的指示: angular.module('ui.bootstrap.demo').directive('myDatepicker', function($compile) { var controllerName = 'dateEditCtrl'; return { restrict: 'A', require: '?ngModel', scope: true, link: function(scope, element) { var wrapper = angular.element( '<div class="input-group">' + '<span class="input-group-btn">' + '<button type="button" class="btn btn-default" ng-click="' + controllerName + '.openPopup($event)"><i class="glyphicon […]

以严格模式间接评估

我了解eval()如何在非严格的上下文中工作,但在严格模式下使用eval()的情况已经完全困惑了我。 当在全局范围中直接调用eval() ,variables将保留在新的eval()范围内: 'use strict'; eval('var a = 1;'); console.log(a); // ReferenceError: a is not defined 但是,如果我在全局范围内对eval()进行间接调用(应该是相同的东西,对吗?),它的行为好像不是严格模式(如果您不相信我,请参阅此JSFiddle ) : 'use strict'; (0, eval)('var a = 1;'); // indirect call to eval console.log(a); // 1??? 如果你不明白什么(0, eval) ,请参阅谷歌主页为什么使用(0,obj.func)(args)语法? 。 至less根据我对eval()应该如何在严格模式下工作的理解,意思是(无论是直接还是间接调用eval()为eval()调用中定义的variables创build一个新的作用域,然而这似乎并不是这种情况。 规范说明如下: 10.4.2input评估代码 当控制进入eval代码的执行上下文时,执行以下步骤: 如果没有调用上下文,或者如果eval代码没有被直接调用( 15.1.2.1.1 )评估到eval函数,那么, 一个。 如10.4.1.1所述,使用eval代码作为C初始化执行上下文,就好像它是全局执行上下文一样。 其他, 一个。 将ThisBinding设置为与调用执行上下文的ThisBinding相同的值。 湾 将LexicalEnvironment设置为与调用执行上下文的LexicalEnvironment相同的值。 C。 将VariableEnvironment设置为与调用执行上下文的VariableEnvironment相同的值。 如果eval代码是严格的代码 […]

Maven插件用于版本控制和缩小javascript

单页JavaScript应用程序 我已经构build了一个复杂的ajax驱动的单页web应用程序,它使用一个RESTful后端Web服务服务JSON。 JavaScript分成许多不同的文件,每个文件代表某种function或组件。 虽然服务已经进行了alphatesting,但是我只是单独提供所有这些文件而不用缩小。 但现在我想推出一个testing版,我真的需要合并文件,缩小它们,并对它们进行版本化。 我想使用Maven将其添加到我的构build过程中。 Javascript文件types 我正在使用以下“types”的JavaScript文件,其中#3和#4是我的顾虑: 外部文件,例如Google CDN提供的jquery和jquery-ui。 很less更改这些版本,可以手动处理。 我自己托pipe的jquery插件,如fullcalendar或UI布局。 再次,我很less更新这些新版本,并可以手动处理。 应用程序范围的JavaScript代码。 自定义JavaScript跨多个文件传播,可以偶尔更改。 所有这些文件需要加载的应用程序工作。 function特定的JavaScript代码。 在请求特定function时按需加载的自定义JavaScript。 此代码可以相当频繁地更改,并且不会在启动时加载。 构build目标 我想在构build过程中执行以下操作: 将所有types3的JavaScript文件连接在一起,缩小它们,并保存为带有版本号的单个文件。 例如: app-2.0.6.min.js ,其中2.0.6是Maven项目版本。 所有types4文件应该单独缩小并保存为名称中带有版本号的单独文件。 例如: feature-abc-56ab32de29.min.js ,其中56ab32de29是该特定文件的版本号。 使用<script>标签更新HTML文件,以指向具有正确版本号的JavaScript文件。 更新加载types4特征javascript文件的Javscript文件指向正确的版本。 问题 有没有一个maven插件可以协助连接? 有没有一个maven的插件,将有助于缩小? 理想情况下,我想使用Google Closure编译器,但如果更简单,可以与其他人一起使用。 有没有一个maven插件,将有助于版本? 有没有办法让types4的JavaScript文件有独立的版本号? 理想情况下,如果一个文件在版本2.0.5和2.0.6之间没有变化,用户就不需要下载一个新的版本,他们的caching版本就可以正常工作。 我正在使用GIT进行源码控制,那么是否有办法使用文件的GIT哈希码进行版本控制? 有没有一种解决scheme,将压缩在常规HTML文件中内联的JavaScript,而不杀死HTML? 有没有一种解决scheme可以压缩和版本我的CSS文件?

什么是生产级Haskell to JavaScript编译器,编写在浏览器中运行的代码?

我不是在寻找一个拥有10年历史logging的超强健的解决scheme,而是寻找可以在真实应用程序中使用的东西,而不仅仅是能够运行Hello World示例。 我的首选是在服务器上运行编译器,所以我可以提前编译Haskell代码。 当然,这个解决scheme不仅仅是一个编译器,还需要Haskell代码来访问浏览器上可用的API(DOM,XHR …)。 脚注:到目前为止,我所看到的项目似乎并没有得到积极的维护,或者超越了能够运行“Hello world”,甚至超出了项目描述的范围。

如何在JSDoc中指定承诺的parsing和拒绝types?

我有一些代码返回一个承诺对象,例如使用Q库的NodeJS。 var Q = require('q'); /** * @returns ??? */ function task(err) { return err? Q.reject(new Error('Some error')) : Q.resolve('Some result'); } 如何使用JSDoc文档这样的返回值?

在JavaScript中定义本地函数:使用var还是不行?

当在JavaScript中声明一个本地(内部)函数时,有两个select: 用var关键字声明,赋值给variables: (function() { var innerFunction1 = function() { … }; innerFunction1(); }()); 使用function关键字声明,而不分配给variables: (function() { function innerFunction2() { … }; innerFunction2(); }()); 我可以看到第二个优点:函数可以在调用它的代码之下声明,所以更容易将私有函数与实际执行的代码分开。 哪个更好 , 为什么 ?

如何避免“不能读取未定义的属性”的错误?

在我的代码中,我处理了一个数组,其中有一些嵌套在另一个中的对象,有些则不这样。 它看起来如下所示: // where this array is hundreds of entries long, with a mix // of the two examples given var test = [{'a':{'b':{'c':"foo"}}}, {'a': "bar"}]; 这是给我的问题,因为我需要遍历数组有时,不一致是抛出我这样的错误: for (i=0; i<test.length; i++) { // ok on i==0, but 'cannot read property of undefined' on i==1 console.log(abc); } 我知道我可以说, if(ab){ console.log(abc)} ,但是如果有多达5个或6个对象嵌套在一起,这是非常乏味的。 有没有其他(更简单)的方式,我可以只有做console.log如果存在,但没有抛出一个错误?

确定从dragenter和dragover事件中拖出的内容

我试图使用HTML5可拖动的API(虽然我意识到它有问题 )。 到目前为止,我遇到的唯一不足就是我无法find一个方法来确定当dragover或dragenter事件触发时被拖动的东西: el.addEventListener('dragenter', function(e) { // what is the draggable element? }); 我意识到我可以认为这是dragstart事件的最后一个元素,但是…多点触控。 我也尝试使用dragstart e.dataTransfer.setData来附加一个唯一的标识符,但显然这些数据是从dragover / dragenter 无法访问的 : 这个数据只有在下降事件发生时才会出现。 那么,有什么想法? 更新:在撰写本文时,HTML5的拖放似乎并没有在任何主stream的移动浏览器中实现,从而在实践中提出了多点触摸模拟的观点。 然而,我想要一个解决scheme,保证在任何规范的实现工作,这似乎并没有排除多个元素被同时拖动。 我已经发布了一个工作解决scheme ,但这是一个丑陋的黑客。 我仍然希望有更好的答案。

为什么未执行的语句会减慢我的function?

我创build了四个不同的function,如下所示: var normal = function() { return; }; var control = function() { return; alert("Hello, world!"); }; var withArguments = function() { return; arguments; }; var withEval = function() { return; eval(""); }; 既然他们什么都不做,立即回来,我希望他们都有同样的速度。 但是, 在jsPerf上testing之后,我发现normal和control执行相同,但是withArguments和执行速度要慢得多。 为什么这些未执行的声明会对性能产生影响? 由于他们从来没有执行过,他们怎么可能有任何效果呢?