【发布时间】:2017-11-10 21:17:01
【问题描述】:
我正在尝试根据元素 ID 更新函数的参数。下面的代码按预期工作,因为 ID 参数是硬编码的。
window.setInterval(function() {
$('#result').text(collision_(
$('#task1'), $('#task2'), $('#task3'), $('#task4')
));
}, 200);
当我尝试动态编译参数时,函数不起作用。
window.setInterval(function() {
function workerTasks() {
var task = document.getElementById("worker1").children;
var tasks = [];
for (i = 0; i <= task.length - 1; i++) {
tasks.push($("#" + task[i].id))
}
return tasks;
}
$('#result').text(collision_(tasks));
}, 200);
任何帮助将不胜感激!
下面的更新代码---------
我将它与可拖动的碰撞函数配对,这些碰撞函数是由真或假响应驱动的 - 但我仍然无法指示来自 'workerTasks' 的数组供 'collision_' 使用。
$(document).ready(function(){
setInterval(function() {
$('#result').text(collision_(workerTasks()));
console.log(tasks);
}, 200);
});
function workerTasks() {
var tasks = '';
$('#worker1 [id^=task]').each(function(i){
var comma = $('#worker1 [id^=task]').length == i ? '' : ',';
tasks += $('#' + $(this).attr('id')) + comma;
});
return tasks;
}
function collision_() {
if (arguments.length > 1) {
for (var x = 0; x < arguments.length; x++) {
for (var y = 1; y < arguments.length; y++) {
if (x == y) {
continue;
}
if (collision(arguments[x], arguments[y])) {
return true;
}
}
}
return false;
}
}
function collision($div1, $div2) {
var x1 = $div1.offset().left;
var y1 = $div1.offset().top;
var h1 = $div1.outerHeight(true);
var w1 = $div1.outerWidth(false);
var b1 = y1 + h1;
var r1 = x1 + w1;
var x2 = $div2.offset().left;
var y2 = $div2.offset().top;
var h2 = $div2.outerHeight(true);
var w2 = $div2.outerWidth(false);
var b2 = y2 + h2;
var r2 = x2 + w2;
if (b1 < y2 || y1 > b2 || r1 < x2 || x1> r2) return false;
return true;
}
【问题讨论】:
-
我猜tasks.push应该推送一个对象而不是字符串。尝试删除“”
-
你将一堆字符串推送到
tasksjquery 代码不执行 -
@Programmer1228 它应该是
tasks.push($("#" + task[i].id))在你的循环中像这样 -
第一个:
function_是什么?? -
谢谢@daremachine 和@Nirus!删除“”返回正确的字符串。我已经更新了原帖。即使“返回任务”,function_ 仍然没有返回值; console.log 中的输出与原始参数 $('#task1'),$('#task2'),$('#task3'),$('#task4') 相同。想法?
标签: javascript jquery arrays function parameters