1

フォーム内の特定の入力から文字列を連結し、別の入力にその文字列を入力しようとしています。以下にスクリプトを含め、jsフィドルにリンクしました。

each()の条件文内のコードは冗長すぎると思いますが、他の方法で機能させることはできないようです。任意の提案をいただければ幸いです。

var $namers = $(".namer");
$namers.on('change', function () {
    var length = $namers.length - 1;
    var nameString = "";
    $namers.each(function (i) {
        var delimiter = "";
        if ($(this).find(":selected").attr('value')) {
            if (i < length) delimiter = ": ";
            thisVal = $(this).find(":selected").text();
            nameString = nameString + thisVal + delimiter;
        } else if ($(this).is("input") && $(this).val()) {
            if (i < length && $(this).hasClass("from")) delimiter = "-";
            thisVal = $(this).val();
            nameString = nameString + thisVal + delimiter;
        }
    });
    $("#summary").val(nameString);
});

これが私のオリジナルです:http: //jsfiddle.net/3HsQW/

そして、配列を使用して物事を改善するための最初の試みは、はるかに優れているかどうかはわかりません。 http://jsfiddle.net/3HsQW/1/

4

3 に答える 3

0

私はそれを完全にテストしていませんが、このようなものもうまくいくはずです:

var $namers = $('.namer');

$namers.on('change', function () {
    var nameString = '';

    $namers.each(function(i) {
        var $this = $(this);
        var $selected = $this.find(':selected');

        if ($selected.attr('value')) {
            nameString += $selected.val() + ': ';
        } else if ($this.is('input') && $this.val()) {
            nameString += $this.val() + $this.hasClass('from') ? '-' : '';
        }
    });

    $('#summary').val(nameString);
});

i < length条件は常にであるため、そのfalseコードを削除できます。

于 2013-01-17T01:48:57.360 に答える
0

これは、jqueryが邪魔になるまれなケースの1つです。私は次のようなものをお勧めします:

$("option").each( function() { this.value = $(this).text(); } );
$namers = $(".namer");
$names.on('change', function () {
    var length = $namers.length - 1;
    var nameString = "";
    $namers.each(function (i) {
        nameString += this.value;
        if (this.tagName == 'SELECT') nameString += ':';
        if (this.className == 'from') nameString += '-';
    });
    $("#summary").val(nameString);
});
于 2013-01-17T02:03:46.693 に答える
0

私は他の両方の答えを試しましたが、どちらもうまくいきませんでした。また、 http://codereview.stackexchange.comを使用する必要があることも学びました。

私は最終的にこれを決定しました(これが他の誰かに役立つかどうかについては予約がありますが):

var $namers = $(".namer");
$namers.on('change', function () {
    var length = $namers.length - 1;
    var nameString = "";
    var names = [];
    $namers.each(function (i) {
        var delimiter = "";
        if (i < length) delimiter = ": ";
        if ($(this).find(":selected").attr('value')) {
            names[i] = $(this).find(":selected").text() + delimiter;
        } else if ($(this).is("input") && $(this).val()) {
            if ($(this).hasClass("from")) delimiter = "-";
            names[i] = $(this).val() + delimiter;
        }
        if (names[i]) nameString += names[i];
    });
    $("#summary").val(nameString);
});
于 2013-01-17T03:01:53.203 に答える