小编Aus*_*ust的帖子

IE8中的"Array.prototype.slice:'this'不是JavaScript对象"错误

据我所知,IE8可以访问该Array.prototype.slice方法.然而,当我试图将它NodeList变成一个数组时,它给了我错误Array.prototype.slice: 'this' is not a JavaScript object.你可以在这里查看,或者在这里查看我的代码:

HTML

<div id="test">Test</div>
Run Code Online (Sandbox Code Playgroud)

JavaScript的

var divs = document.getElementsByTagName('div');
divs = Array.prototype.slice.call(divs);
console.log(divs);
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

javascript arrays dom prototype nodelist

9
推荐指数
1
解决办法
8615
查看次数

(typeof variable ==="function")和jQuery.isFunction()之间有什么区别?

我一直在使用(typeof variable === "function"),我偶然发现jQuery.isFunction(),我在想:

  1. typeof方法和jQuery的方法有什么区别?而且不仅仅是差异,而是
  2. 什么时候使用typeof方法是合适的,什么时候适合使用jQuery的方法?

javascript jquery function typeof

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

有没有通用的方法来"关闭"<select>下拉菜单(而不是.blur())?

你可以使用一个巧妙的技巧来"关闭"一个<select>下拉菜单.

$('#test').click(function(){
    $('#test').hide();
    setTimeout(function(){
        $('#test').show();
    },20);
});?
Run Code Online (Sandbox Code Playgroud)

这似乎总是适用于Windows上的Chrome和Firefox.IE在我的实际代码中工作,但是当我在IE中测试jsfiddle代码时,它不起作用.在Mac上,这对任何浏览器都不起作用.Mac和Windows之间的区别在于,在Mac上,选项在它们自己的元素中打开(有点 - 检查页面显示没有新元素).因此下拉栏会隐藏并返回,但带有选项的新菜单不会被视为其中的一部分,$('#test')因此它们不会隐藏.在Windows中,带有选项的菜单被认为是其中一部分,$('#test')因此当您隐藏它时,菜单会随之隐藏.

所以问题是,有没有办法"关闭" <select>适用于任何浏览器和任何操作系统的下拉菜单?


UPDATE

我不是说使用.blur(),这就是原因.我有一些模拟下拉菜单的代码但实际上是<select multiple>.所以我只有一个正常的<select>可见,当我点击它时,我用一个绝对定位的<select multiple>元素替换它.选择选项后,这会消失,<select>元素会回来.对此的任何帮助都会很棒.

html javascript jquery html5 drop-down-menu

7
推荐指数
1
解决办法
9583
查看次数

如何在.apply()方法中添加回调?

在我的代码中,我有一个函数调用数组.我遍历这些调用并使用.apply()来调用它们.问题是如果新函数的调用需要任何时间,则循环将.apply()并在前一个函数完成之前调用下一个函数.>.<这是一个例子:

function someFunc(element, calls){
  if(calls.length){
    fn = calls[0];
    calls.shift();
    fn.apply(element, args);
    someFunc(element, calls);
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,如果在apply函数上有回调,那么这可以按照我想要的方式工作.即

function someFunc(element, calls){
  if(calls.length){
    fn = calls[0];
    calls.shift();
    fn.apply(element, args, function(){
      someFunc(element, calls);
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

我还有一个关于在回调函数中调用someFunc的问题.我的calls数组中的函数会影响我的element变量.所以我想确保在它被改变后它被传递给回调中的someFunc,所以下一个函数也可以操作它.有时我只是对this上下文感到困惑.:)

如果它有帮助,我使用jQuery.我知道如何向jQuery方法添加回调,但是当我处理本机JavaScript代码时,我不知道如何做到这一点.如何在.apply()方法中添加回调?

javascript jquery callback

6
推荐指数
1
解决办法
229
查看次数

在node.js中,如何使用socket.io和express设置redis?特别是使用RedisStore()

第一个问题
我正在试图找出会话,商店,授权和redis.如果它很重要,我正在使用Express@3.0.0rc4.我明白我有两个选择RedisStore().我用哪一个?我同时使用两者吗?

express.session({secret: 'secret', key: 'key', store: new RedisStore()});
io.set('store', new RedisStore());
Run Code Online (Sandbox Code Playgroud)

我已经有了node.js,expresssocket.io运行.所以现在我正在尝试实现,redis但我不知道如何使用会话/存储实现授权,我不知道如何写入redis数据库.我还没有找到任何相关文档.我找到了一个网站,讨论使用socket.io和express但没有redis的会话和商店,另一个讨论使用所有三个的会话和商店,但它没有使用io.set('store', ...).

我也不知道我是否应该使用两个不同的商店,一个用于express一个socket.io,一个用于,或者我应该只使用一个.请查看示例以获得澄清:

//Redis Variables
var redis = require('socket.io/node_modules/redis');
var RedisStore = require('socket.io/lib/stores/redis');
var pub = redis.createClient();
var sub = redis.createClient();
var client = redis.createClient();
var redis_store = new RedisStore({
                        redisPub: pub,
                        redisSub: sub,
                        redisClient: client
                      });

app.configure(function(){
  //...code goes here...
  app.use(express.session({
                    secret: 'secret',
                    key: 'key', …
Run Code Online (Sandbox Code Playgroud)

session redis node.js express socket.io

6
推荐指数
1
解决办法
2496
查看次数

是否可以使用字符串从对象调用方法?

是否可以使用字符串从对象调用方法?

var elem = $('#test');             //<div id="test"></div>
var str = "attr('id')";  

//This is what I'm trying to achieve
  elem.attr('id');                 //test

//What I've tried so far  
  elem.str;                        //undefined
  elem.str();                      //Object [object Object] has no method 'str'
  var fn = eval(str);              //attr is not defined
  eval(elem.toString()+'.'+str);   //Unexpected identifier

//Only solution I've found so far, 
//but is not an option for me 
//because this code is in a function 
//so the element and method call
//get passed in and I wouldn't know
//what …
Run Code Online (Sandbox Code Playgroud)

javascript string methods jquery eval

5
推荐指数
1
解决办法
232
查看次数

如何在JavaScript中将字符串转换为函数引用?

我想要的是将函数的名称作为字符串传递,并且就像我传递对函数的引用一样.例如,我想这样做:

var test = function(fn){
  fn();
}
test(alert);
Run Code Online (Sandbox Code Playgroud)

等于这个:

var test = function(function_as_string){
    //...code that converts function_as_string to function reference fn
    fn();
}
test('alert');
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

javascript string reflection reference function

5
推荐指数
1
解决办法
3369
查看次数

在指定其他类型时,如何让 TypeScript 推断受约束的泛型类型的值?

在 TypeScript 中,我有一个接受带有约束的泛型参数的函数:

function f1<U extends string>(param: U): U {
  返回参数;
}

const a1 = f1('你好');
// a1 的类型是 'hello' -- 太好了!

现在,我正在尝试这样做,以便您可以选择添加另一种类型作为返回类型的一部分。但是,当我这样做时,我必须为 U 类型提供一个默认参数。这使得 TypeScript 停止推断 U 的值并使用我提供的默认类型:

function f2<T = never, U extends string = string>(param: U): U | T{
  返回参数;
}

const b1 = f2('你好');
// b1 的类型是 'hello' -- 太好了!

const b2 = f2<boolean>('你好');
// b2 的类型是字符串 | boolean -- 糟糕:我希望类型是 'hello' | 布尔值。

const b3 = f2<boolean, 'hello'>('hello');
// b3 的类型是 'hello' | boolean -- …

typescript typescript-generics

5
推荐指数
1
解决办法
338
查看次数

是否可以在同一个if块中运行多个elseif块?

$foo=1;

function someFunction(){
  if($foo==0){ //-------Will test, won't execute
    bar();
  }elseif($foo==1){ //--Will test, and execute
    baz();
  }elseif($foo==2){ //--Doesn't test
    qux();
  }elseif($foo==3){ //--Doesn't test
    quux();
  }else{ //-------------Doesn't test
    death();
  } //------------------The program will skip down to here.
}
Run Code Online (Sandbox Code Playgroud)

假设baz()改变了$ foo的值,每次都不同.我希望我的代码在第一个之后继续测试elseif/else语句,如果它们是真的则运行它们.

我不想再次运行整个函数,(即我不关心$ foo = 0还是1).我正在寻找像"继续"这样的东西.无论如何,请告诉我这是否可行.谢谢.:)

编辑**我的代码实际上比这更复杂.我只是为了理论而放下一些代码.我想要的只是脚本继续测试它通常不会的地方.

php if-statement

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

如何使用php将字符串下载到浏览器?不是文本文件

我的问题是我有一个从数据库查询,时间戳和其他随机事物生成的字符串,并且总是不同,所以我没有要下载的"文件".如何将此生成的字符串作为.txt文件下载到用户的浏览器中?我知道您可以使用标题将文件下载到浏览器,所以可能是这样的:

$result = 'Generated string that is different every time. 20121107160322';

header("Content-Type: text/plain");
header("Content-Disposition: attachment; content=$result");
header("Content-Length: " . strlen($result));
Run Code Online (Sandbox Code Playgroud)

显然这不起作用,但我甚至不知道从哪里开始.

php text download text-files

3
推荐指数
1
解决办法
6289
查看次数

为什么我在使用jQuery时无法通过window对象访问对象?

我正试图通过window对象访问一个函数.在我的代码中,我的函数被字符串引用,所以我必须使用window对象(或eval)来获取它.我用纯JavaScript测试了我的代码,它运行得很好.但是当使用jQuery时它失败了.这是我的测试代码:

function speak(words, callback){
  for(var i=0;i<10000;i++){
      console.log(words);
  }
  if(callback)
    callback.call();
}

console.log(window['speak']);?
Run Code Online (Sandbox Code Playgroud)

以下是纯JavaScript版本的链接.
这是jQuery版本的链接,它不起作用.

我需要做些什么才能在jQuery中使用它?

javascript jquery window-object

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