2011-12-28 79 views
0

我在使用jQuery的插件Facebox处理表单中的某些数据时遇到了一些麻烦。 我想要实现的基本上是将所选复选框的数值输入到一个数组中,并使其在弹出窗口中可用来使用PHP进行处理。 我有一个窗体页上是这样的:将选中的复选框存储在数组中并将其用于facebox

form.html

<input type="checkbox" name="equip" value="<?php echo $equip_id; ?>" /> 
<input type="checkbox" name="equip" value="<?php echo $equip_id; ?>" /> 
<input type="checkbox" name="equip" value="<?php echo $equip_id; ?>" /> 

<input type="button" name="replace" onClick="replace_equip()" /> 

有更多的复选框,但我认为这些都足以上手。

这里是

function replace_equip() { 
    var nArr = new Array(); 
    $("input:checkbox[name=equip]:checked").each(function() { 
    nArr.push($(this).val()); 
    $.facebox(function() { 
    $.ajax({ 
     data: { name : nArr }, 
     error: function() { 
     $.facebox("err"); 
     }, 
     success: function(data) { 
     $.facebox(data); 
     }, 
     type: "post", 
     url: "test.php" 
    }); 
    }); 
}); 
} 

我想选择的复选框保存到一个数组,在某种程度上,我可以在test.php的使用它的PHP处理replace_equip()。

我刚刚开始使用jQuery和一般的JavaScript,所以原谅任何怪物错误,你可能会发现!

回答

0

要开始使用,您的代码有一些风格问题。首先,您应该选择不使用阵列,对象等的new语法。相反,请使用var array = [];之类的内容来声明Array。其次,您正在使用嵌入式onClick,如果您已经使用jQuery,应该避免这种情况。相反,请使用类似$('input[name="replace"]').on('click', function() {...});的东西。你也应该考虑在你的函数中使用camelCase,如果你喜欢下划线,可以使用vars

现在到你的问题的肉。我重构你的代码如下所示:

$('input[name="replace"]').on('click', function() { 
    replaceEquip(); 
}); 

function replaceEquip() { 
    var array = []; 
    $("input:checkbox[name=equip]:checked").each(function() { 
    array.push($(this).val()); 
    }); 

    $.facebox(function() { 
    $.ajax({ 
     type: "POST", 
     url: "test.php", 
     data: { name : array }, 
     error: function() { 
     $.facebox("err"); 
     }, 
     success: function(data) { 
     $.facebox(data); 
     } 
    }); 
    }); 
} 

在你的PHP代码,你会json_decode()这个数组,并要如何使用它。我还将typeurl params移到顶端,因为您的errorsuccess函数可能会变得很长。

我会考虑阅读JavaScript Patterns(至少是基础篇)。

+0

感谢您的重构,提示,json_decode()方式和图书推荐,他们非常感谢!向上学习曲线:) – 2011-12-29 05:47:28

相关问题