js 반복문 선택자 지정 방법?
관련링크
본문
<script>
for(i=1;i<=set_number;i++){
r=Math.floor(Math.random()*1024%16)*16;
g=Math.floor(Math.random()*1024%16)*16;
b=Math.floor(Math.random()*1024%16)*16;
document.write("<tr class='body'><td class='track'><img src='./img/block.gif' id=bar["+i+"] width=1 height=1><img src='./img/snail3.gif' class='pic'> <span id=c["+i+"]></span></td><td class='speed'><input type=text name=m["+i+"] size=3 value=0 readonly></td><td class='rank'><input type=text name=r["+i+"] size=1 value=0 readonly><span>등</span></td><td class='point'><input type=text name=race["+i+"] onKeyPress='onlyNumber()' maxlength='4' size='5' value='0'></td></tr>");
}
</script>
이런 식으로 JS 반복문을 통해 i 값이 증가하는 구문이 있을 경우,
저 굵은색 부분의 input 창을 클릭해서 포커스 상태면 기본값 0이 안 보이게 하려는데,
아래 구문 어디가 잘못 되었을까요?
$(document).ready(function(){
$('name = race['+i+']').focus( function() {
$(this).val();
});
});
!-->
답변 6
선택자에 변수를 넣으셨는데 i값이 없으니 찾을 수 없는겁니다.
document.write할때 input에 class값을 주고
jquery focus할때 선택자를 해당 class명으로 해보세요.
페이지가 다 로딩되기전에
먼저 수행된게 아닐까요?
위의
ready 영역을
tail.php 쯤으로 이동시켜서
나중에 실행되게 해보세요
그리고, i값은 어디서 넘겨받나요?
ready 함수에서는 받는데가 없는거 같은데
ready가 애매해면 조금 구식이라도
body onload="functionCall();" 식으로 만들어서
ready 영역을
function functionCall() {
// 여기에 넣어보심도
}
테스트할만할듯 싶습니다.
계속궁금한건 i 는 어디서 나타났는가 입니다.
<input type=text name=race["+i+"] class='race' onKeyPress='onlyNumber()' maxlength='4' size='5' value='0'>
위 처럼 클래스 추가해 주시고 아랫 부분은 val("")로 처리하시고 시도해 보시죠.
$(document).ready(function(){
$('.race').focus( function() {
$(this).val("");
});
});
동적으로 추가된 구문에는 해당이벤트가 동작 안되는걸로 알고있습니다
$(document).on("focus",'name = race['
+i+
']'
,function(){
이런식으로 등록하셔야 동작합니다
i값은 포문으로 돌리시면 될 듯 하네요
도움 주신 모든 분들 감사합니다. ^^
휴그란트 님 힌트 보고 해결하고 왔더니,
평정심 님이 좀 더 구체적으로 힌트를 주셨네요. ^^;;
해당 요소에 class='bp' 주고, 아래쪽에 아래 코드 넣었더니, 잘 되네요.
$('.bp').on('click focusin', function() {
this.value = '';
});
$('.bp').on('focusout', function() {
if(this.value == 0 || this.value == '') {
this.value = 0;
}
});