0

選択したラジオボタンの値を取得する安全な方法を探しています:

  • フォームIDがわからない
  • 自分のページに類似した (ID を除く) フォームがどれだけあるかわからない

私は現在これを使用しています:

if (($(elem).is('input[type="radio"]')) && ($(elem).attr('name') !== undefined)) {
    return $('input[name="' + $(elem).attr('name') + '"]:checked').val();
}

しかし、似たような名前を異なる形式で持っている場合、これは機能しません。また、そのようなものをセレクターに配置しても安全かどうかさえわかりません。

私の目標は、自然の問題なしgetValue()に 1 つの要素 () の値を返す関数を作成することです。$(elem).length == 1

var getValue = function(elem) {
    if ($(elem).is('input[type="checkbox"]')) {
        return ($(elem).prop('checked') == true);
    }
    else if (($(elem).is('input[type="radio"]')) && ($(elem).attr('name') !== undefined)) {
        return $('input[name="' + $(elem).attr('name') + '"]:checked').val();
    }
    else if ($(elem).prop('value') !== undefined) {
        return $(elem).val();
    } else {
        return $(elem).html();
    }
}

なにか提案を ?

4

2 に答える 2

0

この回答を使用して解決策を見つけました:

// Get selector from any dom element
// @see https://stackoverflow.com/a/2068381/731138
var getPath = function(elem) {
    var path;
    var node = $(elem);
    while (node.length) {
        var realNode = node[0];
        var name = realNode.localName;
        if (!name) {
            break;
        }
        name = name.toLowerCase();
        if (realNode.id) {
            return name + '#' + realNode.id + (path ? '>' + path : '');
        } else if (realNode.className) {
            name += '.' + realNode.className.split(/\s+/).join('.');
        }
        var parent = node.parent();
        var siblings = parent.children(name);
        if (siblings.length > 1) {
            name += ':eq(' + siblings.index(node) + ')';
        }
        path = name + (path ? '>' + path : '');
        node = parent;
    }
    return path;
}

// Return value of any element without knowledge of its type
var getValue = function(elem, contextSelector) {
    if ($(elem).is('input[type="checkbox"]')) {
        return ($(elem).prop('checked') == true);
    }
    if (($(elem).is('input[type="radio"]')) && ($(elem).attr('name') !== undefined)) {
        return $(contextSelector + '>input[name="' + $(elem).attr('name') + '"]:checked').val();
    }
    if ($(elem).prop('value') !== undefined) {
        return $(elem).val();
    } else {
        return $(elem).html();
    }
}

次に、任意のセレクターから投稿するフィールドを回復する必要がある場合、次のようになります。

// Get all data to post
var elemSelector = getPath(elem);
var inputSelector = $(elem).data('input');
var inputData = {};
if (inputSelector !== undefined) {
    if (inputSelector !== '') {
        inputSelector = inputSelector + ' :input';
        $.each($(inputSelector), function (index, node) {
            if (($(node).attr('name') === undefined) && ($(node).attr('id') === undefined)) {
                return true;
            }
            var key = $(node).attr('name');
            if (key === undefined) {
                key = $(node).attr('id');
            }
            inputData[key] = getValue(node, elemSelector);
        });
    } else {
        inputData['value'] = getValue(elem, elemSelector);
    }
}
于 2012-10-30T07:45:18.850 に答える
0

jquery を使用すると、少ない労力で値を取得できます。jqueryには、ボタンの選択に使用できる優れた範囲セレクターがあります。例えば

$("#some_div #inside_div formelement").val();

知っておく必要があるのは、少なくとも親コンテナー ID だけです。

于 2012-10-30T06:58:05.503 に答える