我想從表單中的某些輸入連接一個字符串,並用該字符串填充另一個輸入。我在下面包含了我的腳本,並鏈接到了js小提琴。我該如何改進或減少此javascript的冗餘?
我認爲每個()中條件中的代碼太冗餘了,但我似乎無法使其以任何其他方式工作。任何建議表示讚賞。
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/
我沒有看到任何冗餘,除了nameString線。但是,我發現無用的代碼:'nameString'變量屬於第2行創建的匿名函數。''.each()'調用中使用的匿名函數的每次運行都會被測試,並且在它通過任何條件,'nameString'被設置。只有最後一個任務會被加載到$('#sumary')'中。如果這是預期的行爲,那麼您應該反過來橫過'$ namers'並在找到第一個命中後破壞。 –
像這樣的問題屬於http://codereview.stackexchange.com/,不在這裏。 – jfriend00
@ jfriend00謝謝。我不知道那個網站。我會看看我能否解決這個問題。 –