빈번히 사용되리라 생각되는 아래의 코드
Code: Select all
<a href="#" onclick="doSomething();" >click me!</a>
이런 의문이 들게 된 원인은 아래 코드 입니다.
Code: Select all
<html>
<head>
<script type="text/javascript">
var selectAllType = false;
function selectAll( flag )
{
if( flag != null )
{
selectAllType = flag;
} else
{
selectAllType = !selectAllType;
}
var checkBox = document.forms[0].checkBox;
if( checkBox )
{
if( checkBox.length )
{
for( var index =0; index < checkBox.length;index++)
{
checkBox[ index ].checked = selectAllType;
}
} else
{
checkBox.checked = selectAllType;
}
}
return true;
}
</script>
</head>
<body onload="alert('loaded!');">
<form name="form1" ction="test.html" onsubmit="return selectAll(false);">
<input type="hidden" name="submit" value="true"/>
<table>
<tr><td><input type="checkbox" name="checkBox" value="1"/>item1</td></tr>
<tr><td><input type="checkbox" name="checkBox" value="2"/>item2</td></tr>
</table>
<input type="submit"/>
</form>
<a href="#" onclick="selectAll()" >selectAll</a>
<input type="button" onclick="selectAll()" value="selectAll"/>
</body>
</html>
1. item 앞의 selectBox 들이 위치하고, selectAll 을 누르면 전체선택/전체해제가 전환된다.
2. submit 시에는 selectBox 들을 uncheck 하여 param 으로 넘어가는 것을 막는다.
입니다. 소스에서 보듯이 처음에는 a 테그만을 사용했습니다.
이때 이것을 클릭하면 URL 이 변경됩니다. ( a 테그니까요 )
제 환경상에서 말씀드리자면
file:///d:/tmp/test.html
=> 클릭시 file:///d:/tmp/test.html#
=> submit 버튼 누를경우 uncheck 잘 됨, submit 잘 됨. 이때의 submit 된 경로는 file:///d:/tmp/test.html?submit=true ( submit 이라는 hidden param 이 있음)
이제부터 문제입니다.
file:///d:/tmp/test.html?submit=true
=> 다시 링크 클릭시 file:///d:/tmp/test.html?submit=true#
=> submit 버튼 누를경우 uncheck 만 되고 submit 안됨.
=> URL 은 어떤때는 file:///d:/tmp/test.html?submit=true#
어떤때는 file:///d:/tmp/test.html?submit=true => # 사라짐
=> submit 을 다시 한번 누르면 submit 되고 URL 은 file:///d:/tmp/test.html?submit=true
이렇게 됩니다.
그래서, 위의 case 만으로 판단할 경우
1. 특별히 param 이 넘어오지 않은 경우, 맨 뒤의 # 유무와 관계없이 submit 잘 됨.
2. param 이 넘어올 경우 , a 테그에 의한 # 이 붙어버린 경우
ㄱ. # 만 없어진다?
ㄴ. 그냥 되는 때도 있다?
의 애매모호한 상황입니다. (일단 결국 저는 a 테그가 아니라 span 에 onclick event 를 붙여버렸습니다. )
IE 6.0 에서는 그냥 매번 submit 되고, 저는 FF 1.0.4 영문판을 쓰고 있습니다.
1. 버그라고 봐야 하나?
2. 아닌가? 코딩에 문제가 있는것인가?
곁다리 질문:
강제적으로 submit 시키기 위해 위의 소스코드에
Code: Select all
<form name="form1" ction="test.html" onsubmit="selectAll(false);document.forms[0].submit();">
이것은 왜 나오는지 혹시 / 무엇이 잘못되었을까요.