通过JQuery获取在data属性中传递的元素的值

时间:2013-05-14 08:32:01

标签: jquery

我在数据元素中填充了一些字段名称。我正在尝试使用表单中的字段名称及其对应值形成一个查询字符串,以便在jquery ajax中使用。但是,以下代码对我不起作用。

$(".linkedfill").change(function(){
  var params = $(this).data("select-params").split(",");
  $.each(params, function(index,value){
     pname = value.slice(value.IndexOf("["), value.IndexOf("]"));
     pval = $(this).parents().find("[name='"+value+"']").val();
     addparams = addparams + "&" + pname + "=" + pval;
  });
});

字段名称将类似于header['fldname'],并且字段可以在同一表单中的某个位置使用。 data-select-params类似于data-select-params="header['fld1'],header['fld2']"

更新:我的字段html如下所示:

<input name='header[fld1]' />
<input name='header[fld2]' />
<select class='linkedfill' name='pselect' data-select-params="header[fld1],header[fld2]">
  <option value="opt1">Option 1</option>
  <option value="opt2">Option 2</option>
</select>

尝试使用jquery的方法是获取header[fld1]&amp;的值。 header[fld2]并从数据中形成查询字符串。

任何人都可以帮我解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

为什么不制作一系列参数,例如:

//if you need you can iterate the header[h1]..header[hn] push inside the function below
$('.linkedfill').data('select-params', ["header[h1]","header[h2]",...,"header[hn]"]);

然后使用

访问它
$.each($('.linkedfill').data() , function() {
 console.log($('.linkedfill').data());
// ..do your stuff..
})

这是一个小提琴http://jsfiddle.net/DgbRn/

答案 1 :(得分:0)

试试这个:

var data="header['fld1'],header['fld2']";
var params = data.split(",");
var addparams='';
$.each(params, function(index,value){
     console.log(value.indexOf("['")+','+value.indexOf("']")+','+value);
     pname = value.substring(value.indexOf("['")+2, value.indexOf("']"));
     pval = $('form').find("header["+pname+"]").val();
     addparams = addparams + "&" + pname + "=" + pval;
     console.log(addparams);
});

小提琴: http://jsfiddle.net/Ju297/1/

我不知道你想要什么,但你可以简单地说,

var data="fld1,fld2";
var params = data.split(",");
var addparams='';
$.each(params, function(index,value){
     pval = $('form').find("header["+value+"]").val();
     addparams = addparams + "&" + value + "=" + pval;
     console.log(addparams);
});