我有两个选择元素,A和B:当A的选择的选项更改时,B的选项必须相应地更新。A中的每个元素都暗示着B中的许多元素,这是一对多的关系(A包含国家,B应该包含位于给定国家中的城市)。
该函数do_ajax应运行异步请求:
do_ajax
function do_ajax(elem, mydata, filename) { $.ajax({ url: filename, context: elem, data: mydata, datatype: "html", success: function (data, textStatus, xhr) { elem.innerHTML = data; } }); }
为了更新B的选项,我在A的onChange事件中添加了一个函数调用。这A是触发onChange事件(of )时运行的函数:
onChange
A
function my_onchange(e) // "e" is element "A" { var sel_B = ... ; // get select element "B" // I skipped some code here // ... var data = { 'mode': 'filter_city', 'id_A': e[e.selectedIndex] }; do_ajax(city_sel, data, 'ajax_handler.php'); }
}
我已经阅读了JQuery文档,该文档data可以是数组(键值对)。我输入以下错误:
data
var data = { 'mode': 'filter_city', 'id_A': e[e.selectedIndex] };
相反,如果我的数据是字符串,我不会得到该错误:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
但是我需要在服务器端php代码中使用变量的“数组版本”。
在Uncaught TypeError: Illegal invocation位于“jQuery的1.7.2.min.js”的文件,这是所有的压缩,所以我无法弄清楚哪些代码部分提出的错误。
Uncaught TypeError: Illegal invocation
我可以在代码中进行任何设置更改,使其接受数据作为关联数组吗?
通过与 Sarfraz 的交谈,我们可以找到解决方案。
问题是我传递了HTML元素而不是它的值,这实际上是我想要做的(实际上,在我的php代码中,我需要将该值作为查询cities表和过滤正确条目的外键)。
cities
因此,代替:
它应该是:
var data = { 'mode': 'filter_city', 'id_A': e[e.selectedIndex].value };
注意: 检查JasonKulatunga的答案,它引用JQuery文档来解释为什么传递HTML元素会引起麻烦。