如何在AJAX函数中遍历jQuery?

如何在AJAX函数中遍历jQuery?,jquery,traversal,Jquery,Traversal,我在使用jQuery进行遍历时遇到困难。我有一个带有一组动态下拉框的表单,我试图基于元素类而不是id调用特定的操作,因为这个表单可以在我的应用程序中克隆 知道为什么我的遍历不起作用吗?我的$(此)呼叫是否以某种方式无效 HTML: 项目: 挑选 ... 此不再是触发事件的DOM元素。您可以使用以下选项的上下文设置此的值: 您还可以将this的值存储在变量中,并在回调中使用它: $(".item").change(function () { var group_id = $(this).

我在使用jQuery进行遍历时遇到困难。我有一个带有一组动态下拉框的表单,我试图基于元素类而不是id调用特定的操作,因为这个表单可以在我的应用程序中克隆

知道为什么我的遍历不起作用吗?我的
$(此)
呼叫是否以某种方式无效

HTML:


项目:
挑选
...

不再是触发事件的DOM元素。您可以使用以下选项的
上下文设置
的值:

您还可以将
this
的值存储在变量中,并在回调中使用它:

$(".item").change(function () { 

  var group_id = $(this).val();
  var self = this;

   $.ajax({
        type: "POST", 
        url: "../../db/items.php?id=" + group_id, 
        dataType: "json",
        success: function(data){
            // use "self" instead of "this"
        }
    })  

});

另一个注意事项:您应该考虑缓存选择器以获得更高的性能(以及可读性)。此外,还可以将jQuery函数调用链接在一起:

var $children = $(this).parent().next().children('select.options')
    .empty()
    .append('<option value="">Select</option>');

$.each(data, function(i, val){    
   $children.append('<option value="' + val.group_id + '">' + val.name + '</option>');
});
$children.focus();
var$children=$(this.parent().next().children('select.options'))
.empty()
.append('Select');
$.each(数据,函数(i,val){
$children.append(“”+val.name+“”);
});
$children.focus();

是的,$现在指的是ajax调用中的success函数。添加这一行

$(".item").change(function () {  

  var group_id = $(this).val(); 
  var item = $(this); // Added line

现在,在ajax函数中,使用$this的项。

是的,在回调中,
this
引用了其他内容。如果您想要对DOM元素的引用,您必须更早地存储它。可能会重复将其分配给变量。我现在没有提到ajax调用中的上下文属性。这似乎比我建议的定义另一个变量更清晰。
 var group_id = $(this).val();
 var myThis = $(this);

   $.ajax({
        type: "POST", 
        url: "../../db/items.php?id=" + group_id, 
        dataType: "json",
        success: function(data){
            myThis.parent().next().children('select.options').empty(); 
        ...
var $children = $(this).parent().next().children('select.options')
    .empty()
    .append('<option value="">Select</option>');

$.each(data, function(i, val){    
   $children.append('<option value="' + val.group_id + '">' + val.name + '</option>');
});
$children.focus();
$(".item").change(function () {  

  var group_id = $(this).val(); 
  var item = $(this); // Added line
 var group_id = $(this).val();
 var myThis = $(this);

   $.ajax({
        type: "POST", 
        url: "../../db/items.php?id=" + group_id, 
        dataType: "json",
        success: function(data){
            myThis.parent().next().children('select.options').empty(); 
        ...