我有一段代码,当一组表单值发生变化时,这个人写了三十个函数.
我想把它们组成一个单一的功能
$('#jobs_held').change(function() {
// do something, with a little variation
});
$('#residence_years').change(function() {
// do something, with a little variation
});
$('#how_long').change(function() {
// do something, with a little variation
});
Run Code Online (Sandbox Code Playgroud)
无论如何我可以做点什么......
$('#jobs_held', '#residence_years', '#how_long').change(function(){
// do something, with a little variation
});
Run Code Online (Sandbox Code Playgroud) 目前我正在使用
$str = preg_replace("/\([^\)]+\)/", "", $str); // Remove () and Content
$str = preg_replace("/\[[^\)]+\]/", "", $str); // Remove [] and Content
$str = preg_replace("/\{[^\)]+\}/", "", $str); // Remove {} and Content
$str = preg_replace("/[^a-zA-Z0-9]/", "", $str); // Remove all non-alphanumeric characters
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法将这些组合成一个正则表达式语句
假设
socketMethods:{
update:function(data){
this.emit("test", data);
console.log("socket.update");
},
test:function(data){
this.emit("test", data);
console.log("socket.test");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是可能的,并且允许我发出"test"和"update",并且将调用"test"和"update"
socket.on("test", function(data){
dummy.socketMethods.test.call(socket, data);
});
socket.on("update", function(data){
dummy.socketMethods.update.call(socket, data);
});
Run Code Online (Sandbox Code Playgroud)
以下这些是不可能的......如果我发出"test"或"update",每个人都会调用"test".如果我使用FOR循环,所有方法都将成为调用的"最后"方法.
那就是:如果我切换更新并测试以便测试是第一个,并且更新是socketMethods对象中的第二个.无论我是否要求"测试"或"更新",都会始终调用"更新"
for(key in dummy.socketMethods){
socket.on(key, function(data){
dummy.socketMethods[key].call(socket, data);
});
}
var methods = ["test", "update"];
while(methods.length !== 0){
var method = methods.pop();
console.log(method);
socket.on(method, function(data){
dummy.socketMethods[method].call(socket, data);
});
}
var methods = ["test", "update"];
for(var i = 0; i < methods.length; i++){
console.log(i);
socket.on(methods[i], function(data){
console.log(i);
dummy.socketMethods[methods[i]].call(socket, data);
});
}
Run Code Online (Sandbox Code Playgroud)
CLUE:使用'i'的for循环有两个console.logs.第二个console.log返回"2"
为什么会这样?我怎么能用for循环来连接我的socketMethods?
我正在为自己构建一个调试工具.我想要它做的是在任何元素被点击时放置一个类.
像这样的东西:
$('*').click(function(){$(this).toggleClass('debug')});
Run Code Online (Sandbox Code Playgroud)
这实际上是有效的,除了它切换所有元素的"调试".
例如:
<body>
<div id='3'>
<div id='2'>
<div id='1'></div>
</div>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
如果我点击<div id="1">它,它将添加一个名为"debug"的类到<div id="2">和<div id="3">.
发生的事情是当你点击<div id="1>它时,它算作对所有3的点击,因为从技术上讲,所有的div都被点击了.所以我考虑过拥有一个包含所有HTML元素的数组.
到目前为止,我有:
window.v = [];
$('*').click(function(){window.v.push(this)});
Run Code Online (Sandbox Code Playgroud)
之后,它是:
$(window.v[0]).toggleClass('debug');
Run Code Online (Sandbox Code Playgroud)
不幸的是,当这个:
$(window.v[window.v.length]).toggleClass('debug');
Run Code Online (Sandbox Code Playgroud)
...或以上执行,它什么都不做.有时,它会将"debug"类放在body标签上.
所以,我不确定使用数组是否是最佳途径.有没有其他人对如何普遍点击任何元素并在其上放置调试类有任何想法?
提前致谢.