小编Šim*_*das的帖子

可以在JavaScript中的语句内部显示函数声明吗?

请将官方ECMAScript规范视为您的答案来源,而不是特定浏览器供应商发布的文档.(我知道Mozilla使用"函数语句"扩展其JavaScript实现.)

那么,根据ECMAScript规范,ergo,其中定义的句法产品,这是有效的吗?

if (foo) {
    function x() { return; }
}
Run Code Online (Sandbox Code Playgroud)

更新:我的问题也可以这样说: Statement生产是否包含 FunctionDeclaration生产?

结论:答案是否定的.

javascript

17
推荐指数
1
解决办法
1534
查看次数

如何在Internet Explorer中暂停JavaScript执行?

我有以下场景:

  • 主页
  • 嵌套页面
  • 常见的JS文件(包含在两个页面中)

随后将嵌套页面加载到主页面的iframe中.两个页面在页面加载时从公共JS文件调用函数.

现场演示:
http ://www.ecmazing.com/misc/pause-execution/mainpage.html
http://www.ecmazing.com/misc/pause-execution/nestedpage.html
http://www.ecmazing.com /misc/pause-execution/common.js

常见的JS文件包含一个全局函数,它将H1元素绘制为红色.我想在该函数的开头暂停执行,以便在H1元素仍为黑色时暂停执行.

如何在主页面上执行此操作:

这是微不足道的.只需加载页面,打开浏览器的开发工具,选择common.js文件,并在函数的第一行设置断点.现在,重新加载页面.断点将持续重新加载,执行将暂停.

如何在嵌套页面上执行此操作:

现在,在Chrome和Firefox(Firebug)中,上面设置的断点(对于主页面)也适用于嵌套页面.两个页面都使用相同的JS文件,并且在该文件中设置断点将自动应用于这两个页面.不幸的是,这条规则不适用于IE.

更糟糕的是,即使我随后设置了断点,然后仅重新加载iframe,断点也不会持续存在.

所以,我不知道如何在IE中暂停执行嵌套页面.可以吗?(我通过debugger;在函数开头手动设置a来处理这个问题,但我希望能够通过IE中的开发工具设置断点,如果可能的话.)

javascript browser debugging iframe internet-explorer

17
推荐指数
1
解决办法
5692
查看次数

操作innerHTML会删除子元素的事件处理程序吗?

我有这个非常简单的演示:

function foo() {
    alert('Works!');
}

var inp = document.createElement('input');
inp.onblur = foo;
document.body.appendChild(inp);
Run Code Online (Sandbox Code Playgroud)

见这里: http ://jsfiddle.net/A7aPA/

如你所见,这是有效的.(单击输入,然后单击其他位置,将弹出警报.)

但是,如果我将此行添加到JavaScript代码中:

document.body.innerHTML += '<br>'; 
Run Code Online (Sandbox Code Playgroud)

然后模糊处理程序停止工作(并没有抛出错误顺便说一句).

见这里: http ://jsfiddle.net/A7aPA/1/

这是为什么?

javascript browser dom dom-events

16
推荐指数
2
解决办法
1万
查看次数

跟踪在页面上显示某些元素所花费的时间

所以假设我们有4个Div(3个隐藏,1个可见),用户可以通过javascript/jQuery在它们之间切换.

我想计算在每个Div上花费的时间,并将包含该时间的xhr发送到服务器以将其存储在数据库中.当用户切换div视图时,将发送此xhr.

我怎样才能做到这一点?任何提示将不胜感激.

谢谢,

html javascript jquery timer

16
推荐指数
3
解决办法
2万
查看次数

从字符串中删除除第一个之外的所有点

给出一个字符串

'1.2.3.4.5'
Run Code Online (Sandbox Code Playgroud)

我想得到这个输出

'1.2345'
Run Code Online (Sandbox Code Playgroud)

(如果字符串中没有点,则应该保持字符串不变.)

我写了这个

function process( input ) {
    var index = input.indexOf( '.' );

    if ( index > -1 ) {
        input = input.substr( 0, index + 1 ) + 
                input.slice( index ).replace( /\./g, '' );
    }

    return input;
}
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/EDTNK/1/

它有效,但我希望有一个更优雅的解决方案......

javascript string

16
推荐指数
2
解决办法
8526
查看次数

如何防止Markdown将生成的HTML包装在<p>元素中?

更新:赏金是使用"标记"库的解决方案.


这个Markdown代码:

*foo*
Run Code Online (Sandbox Code Playgroud)

将生成此HTML代码:

<p><em>foo</em></p>
Run Code Online (Sandbox Code Playgroud)

现场演示: https ://jsbin.com/luganot/edit?js,console

但是,我已经将生成的HTML代码注入到内联上下文中,如下所示:

<p> text [inject generated HTML here] text </p>
Run Code Online (Sandbox Code Playgroud)

所以我不希望<p>元素包围生成的HTML代码.我只想将*分隔符转换为<em>元素,依此类推.

有没有办法告诉Markdown转换器不生成<p>包装器?目前,我正在.slice(3,-4)使用生成的HTML字符串,它确实删除了<p></p>标签,但这显然不是我想长期保留的解决方案.

javascript markdown

16
推荐指数
1
解决办法
2003
查看次数

setInterval函数可以自行停止吗?

我有一个jsFiddle得到一个例子来工作.

$().ready(function() {
    $('.test').each(function() {
        $this = $(this);
        $this.data('Worker', function() {
            $('#stop').html((parseInt($('#stop').html()) + 1))
        })
        setInterval($this.data('Worker'), 100);
    });

    $('#stop').click(function() {
        // I want the worker function to stop being triggered here
        $('.test').remove();
    });
});
Run Code Online (Sandbox Code Playgroud)

我想要做的是将一个worker函数附加到DOM中的元素,以便在删除元素时,worker函数停止.

这样的事情可能吗?

jquery

15
推荐指数
2
解决办法
2万
查看次数

为什么这个重要的CSS值被覆盖了?

HTML:

<div id="test">This is a test</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

var elem = document.getElementById('test');

elem.style.setProperty('color', 'green', 'important');
elem.style.color = 'red';
Run Code Online (Sandbox Code Playgroud)

现场演示: http ://jsfiddle.net/4fn6h/3/

Chrome,Safari和IE9中的文本为绿色,但Firefox和Opera中的文本为红色.(另外,IE7和IE8中的文本是黑色的,因为代码会抛出错误,但让我们忽略它...)

那么,哪些浏览器遵循此标准?是否可以覆盖setProperty(...,'important')或不覆盖?

javascript css

15
推荐指数
1
解决办法
2183
查看次数

注册代码位于外部JavaScript文件中的Grunt任务

我编写了一个我想用作Grunt任务的函数.我可以通过将其添加到Gruntfile来完成此操作:

grunt.registerTask('foo', function () {
    // code here
});
Run Code Online (Sandbox Code Playgroud)

但是,将功能代码保存在单独的文件中更有意义.我计划定义一堆这些自定义任务,我不想膨胀Gruntfile.

我不确定注册这些任务的首选方式是什么.我发现这个工作:

grunt.registerTask('foo', function () {
    require('./path/to/foo.js')(grunt);
});
Run Code Online (Sandbox Code Playgroud)

所以,我在第一个例子中有内联函数,但这一次,我正在加载一个外部文件并立即调用它.在那个外部文件中,我当然要写:

module.exports = function (grunt) {
    // code here
}
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉很乱.有没有更合适的方法呢?

javascript requirejs gruntjs

15
推荐指数
1
解决办法
1万
查看次数

跨源Ajax请求在Opera和IE9中不起作用?

我正在使用此页面 - http://ecmazing.com/cors.html - 对此资源发出跨域Ajax请求:http://hacheck.tel.fer.hr/xml.pl

它适用于Chrome,Safari和Firefox,但不适用于IE9和Opera.

代码:

var pdata = {'textarea': 'test'};

$.post('http://hacheck.tel.fer.hr/xml.pl', pdata, function(data, status, xhr) {
    output.value = xhr.responseText;
});
Run Code Online (Sandbox Code Playgroud)

(预期结果是XML代码字符串.)

亲眼看看: http ://ecmazing.com/cors.html

在IE9和Opera中,errorXHR对象的处理程序执行并传入此错误对象:

{
    readyState: 4,
    status: 0,
    statusText: 'error'
}
Run Code Online (Sandbox Code Playgroud)

如您所见,此错误对象未显示太多信息.

如何让它在IE9和Opera中运行?

javascript ajax jquery cross-domain cors

14
推荐指数
2
解决办法
7410
查看次数