iT邦幫忙

1

(已解決)javascript 有關迴圈問題

大家好,先提供我的問題程式碼如下:

function valueCheck(Obj){
	var a = document.getElementsByName("a");
	var b = document.getElementsByName("b");
	for(j = 1; j <= 100; j++){
		var Obj_Str = document.getElementsByName("status_"+j);
		var Count = b.length;
		for(i = 0; i < Count; i++){
			sum = 1;
			while(sum < 1500){
				if(Obj_Str[i] == Obj){
					aValue = a[sum].value;
					b[j - 1].value = aValue;
				}
				sum +=3;
			}
		}
	}
}

變數sum可以如理想中的往後面走3個,例如:1、4、7、10、13......

最後結果if(Obj_Str[i] == Obj){...}我希望可以達到例如如下:
b[0].value = a[1].value;
b[1].value = a[4].value;
b[2].value = a[7].value;
b[3].value = a[10].value;
b[4].value = a[13].value;

但目前每一個b[j - 1].value卻都等於最後一個aValue;

還請指教,謝謝

2 個回答

1
dragonH
iT邦大師 4 級 ‧ 2019-08-14 20:38:42

codepen

輸入是什麼

我沒辦法測/images/emoticon/emoticon39.gif

只好鍵盤解題

看更多先前的回應...收起先前的回應...
小斑 iT邦新手 4 級 ‧ 2019-08-14 21:00:07 檢舉

你好,輸入大概是如下:

<textarea name="a">測試一之一</textarea>
<textarea name="a">測試一之二</textarea>
<textarea name="a">測試一之三</textarea>
<input type="checkbox" name="status_1" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試一之二複製</textarea>

<textarea name="a">測試二之一</textarea>
<textarea name="a">測試二之二</textarea>
<textarea name="a">測試二之三</textarea>
<input type="checkbox" name="status_2" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試二之二複製</textarea>

<textarea name="a">測試三之一</textarea>
<textarea name="a">測試三之二</textarea>
<textarea name="a">測試三之三</textarea>
<input type="checkbox" name="status_3" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試三之二複製</textarea>

點選checkbox,會將某一個name="a"輸入框內容,複製到name="b"的輸入框內容。

dragonH iT邦大師 4 級 ‧ 2019-08-14 21:33:57 檢舉

小斑
我實在是看不懂你的那些迴圈要做什麼XD /images/emoticon/emoticon01.gif

不過照你的說明的話

const a = document.getElementsByName("a");
const b = document.getElementsByName("b");
const valueCheck = (obj) => {
  const index = obj.name.replace('status_', '');
  b[index - 1].value = a[3 * index - 2].value;
}

codepen

小斑 iT邦新手 4 級 ‧ 2019-08-15 10:20:19 檢舉

謝謝,可以了

原來幾行程式就可以了,我搞得太複雜了/images/emoticon/emoticon16.gif

dragonH iT邦大師 4 級 ‧ 2019-08-15 10:24:38 檢舉

/images/emoticon/emoticon82.gif

小斑 iT邦新手 4 級 ‧ 2019-08-15 10:25:05 檢舉

PS:兩位的解答都有幫助到,實在太難選為誰是最佳解答了><

dragonH iT邦大師 4 級 ‧ 2019-08-15 10:27:27 檢舉

看你心情XD/images/emoticon/emoticon01.gif

遇到有回應的發問

我已經感到痛哭流涕了

1
小魚
iT邦高手 1 級 ‧ 2019-08-15 07:47:49

我根據你的原始碼寫了以下JavaScript,
你的迴圈有點莫名其妙,
以你的情況根本不需要迴圈,
觸發事件的時候就會去呼叫function了.

<!DOCTYPE html>

<html> 
<head> 
	<meta charset="utf-8">
	<title>Test</title> 
</head> 
<body>
<textarea name="a">測試一之一</textarea>
<textarea name="a">測試一之二</textarea>
<textarea name="a">測試一之三</textarea>
<input type="checkbox" name="status_1" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試一之二複製</textarea>

<textarea name="a">測試二之一</textarea>
<textarea name="a">測試二之二</textarea>
<textarea name="a">測試二之三</textarea>
<input type="checkbox" name="status_2" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試二之二複製</textarea>

<textarea name="a">測試三之一</textarea>
<textarea name="a">測試三之二</textarea>
<textarea name="a">測試三之三</textarea>
<input type="checkbox" name="status_3" onclick="valueCheck(this)">勾選複製
<textarea name="b">將測試三之二複製</textarea>
</body>
<script>
function valueCheck(Obj)
{
	const a = document.getElementsByName("a");
	const b = document.getElementsByName("b");

	var index = Obj.name.replace('status_', '');
	var check = Obj.checked;

	if(check)
	{
		//勾選才複製, 沒勾選不複製
		b[index-1].value = a[3*index-2].value;
	}
	else
	{
		//隨便要做什麼,在這裡我把它清空,看起來比較明顯
		b[index-1].value = '';
	}
}
</script>
</html>
小斑 iT邦新手 4 級 ‧ 2019-08-15 10:21:37 檢舉

謝謝,原來如此,可以了

小斑 iT邦新手 4 級 ‧ 2019-08-15 10:25:16 檢舉

PS:兩位的解答都有幫助到,實在太難選為誰是最佳解答了><

小魚 iT邦高手 1 級 ‧ 2019-08-15 13:13:59 檢舉

那就擲杯吧

P.S.現在回文怎麼沒有Markdown了?

我要發表回答

立即登入回答