据我所知,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)
这里发生了什么?
我一直在使用(typeof variable === "function"),我偶然发现jQuery.isFunction(),我在想:
你可以使用一个巧妙的技巧来"关闭"一个<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>适用于任何浏览器和任何操作系统的下拉菜单?
我不是说使用.blur(),这就是原因.我有一些模拟下拉菜单的代码但实际上是<select multiple>.所以我只有一个正常的<select>可见,当我点击它时,我用一个绝对定位的<select multiple>元素替换它.选择选项后,这会消失,<select>元素会回来.对此的任何帮助都会很棒.
在我的代码中,我有一个函数调用数组.我遍历这些调用并使用.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()方法中添加回调?
第一个问题
我正在试图找出会话,商店,授权和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,express和socket.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) 是否可以使用字符串从对象调用方法?
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) 我想要的是将函数的名称作为字符串传递,并且就像我传递对函数的引用一样.例如,我想这样做:
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)
我怎样才能做到这一点?
在 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 -- … $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).我正在寻找像"继续"这样的东西.无论如何,请告诉我这是否可行.谢谢.:)
编辑**我的代码实际上比这更复杂.我只是为了理论而放下一些代码.我想要的只是脚本继续测试它通常不会的地方.
我的问题是我有一个从数据库查询,时间戳和其他随机事物生成的字符串,并且总是不同,所以我没有要下载的"文件".如何将此生成的字符串作为.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)
显然这不起作用,但我甚至不知道从哪里开始.
我正试图通过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 ×7
jquery ×5
function ×2
php ×2
string ×2
arrays ×1
callback ×1
dom ×1
download ×1
eval ×1
express ×1
html ×1
html5 ×1
if-statement ×1
methods ×1
node.js ×1
nodelist ×1
prototype ×1
redis ×1
reference ×1
reflection ×1
session ×1
socket.io ×1
text ×1
text-files ×1
typeof ×1
typescript ×1