[jQuery] serialize object

function serializeObject(targetElement) {
  var obj = [];
  $(targetElement).find('input, textarea, select').each(function (idx, ele) {
    var $ele = $(ele);
    var name = $ele.attr('name'),
      type = $ele.attr('type'),
      checked = $ele.prop('checked'),
      disabled = $ele.prop('disabled'),
      val = $ele.val();
    if (typeof name === 'undefined') {
      return true; // jquery each continue
    }
    if (type == 'checkbox' || type == 'radio') {
      if (checked && !disabled) {
        obj[name] = val;
      }
    } else {
      if (!disabled) {
        obj[name] = val;
      }
    }
  });
  return obj;
}

jQuery 객체인 targetElement 자식, 손자들 중 input, textarea, select 태그를 찾아서 jsObject로 만드는 함수. 태그의 name 속성을 object의 키, value나 체크/선택 상태를 object의 값으로 사용한다.

깊이가 1이고 재귀 탐색이 없어 name 속성이 중복되면 나중의 것이 먼저 것을 덮어쓰는 한계가 있다.

고쳐야 하는데 귀찮… 차라리 macek의 jquery-serialize-object를 쓰는게 낫다.

끗.