0

我需要获取传递给 .change 语句的表单元素的索引。

示例 HTML 表单代码

<tr><td>Question1</td><td><select class=list1 id=l[1] name=l[1]><option value=1>1<option value=2> 2 <option value=3> 3 </select></td><td><select class=hideme name=x[1] id=x[1]></select></td></tr>
<tr><td>Question2</td><td><select class=list1 id=l[1] name=l[2]><option value=1>1<option value=2> 2 <option value=3> 3 </select></td><td><select class=hideme name=x[2] id=x[2]></select></td></tr>
<tr><td>Question3</td><td><select class=list1 id=l[3] name=l[3]><option value=1>1<option value=2> 2 <option value=3> 3 </select></td><td><select class=hideme name=x[3] id=x[3]></select></td></tr>

现在用户将从第一个下拉菜单中选择 1、2 或 3。基于该选择,第二个下拉菜单将加载内容。

示例 javascipt jquery 函数

$('.list1').change (function ()
 {
  // here is where I need to pick up the index ie: the [1] [2] or [3] as var id
  var selected = $("#l[id] option:selected");
  var pdata = 'subjectareaid='+selected.val();
  $.ajax({
    type   : "POST",
    cache  : false,
    url    : "subcat.php",
    data   : pdata,
    success: function(data) {
     $('#x[id]').html(data);
     $('#x[id]').removeClass('hideme');
    }
   });
 });

这将允许我根据第一个下拉列表中的选择使用 ajax 调用返回的选项填充第二个下拉列表。

该表有 54 个下拉列表,所有下拉列表都必须对它们执行此操作(这是在提交表单时填充 mysql 表)下拉列表是 (l[id]) 主要类别 (x[id]) 子类别。子猫选择被隐藏,直到主猫被选中,然后选择语句被填充。

4

2 回答 2

0

$(this)您现在可以使用而不是更改选择元素var selected = $("#l[id] option:selected");

您可以通过使用jQuery的最接近()选择器tr达到该选择元素的父元素的索引来达到不断变化的选择的索引。

最后你需要的代码块应该是这样的:

  var selected = $(this);
  var selectedIndex = selected.closest("tr").index();     
  var pdata = 'subjectareaid='+selected.val()+"&index="+selectedIndex;
于 2013-07-14T10:03:27.443 回答
0

首先,在您的属性周围添加双引号",这是最佳实践,如果您在值中使用空格,可以防止错误。还要确保您的 html 是有效的。您没有<option></option>.

您可以使用简单的正则表达式来获取您的选择元素的索引。

$('.list1').change (function () {
    var id = $(this).attr('id');
    var matches = id.match(/^l\[([0-9]{1,})\]/);
    if (matches) {
        var index = matches[1];
    }
});
于 2013-07-14T10:19:40.510 回答