2017-05-10 4 views
1

이 로그인을 허용하는 간단한 로그인 시스템을 만들려고하고 있습니다. 이제는 아바타 이미지를 클릭 할 때마다 이미지가 변경되도록 노력하고 있습니다. 그것은 나도 몰라 "3avatar"등 다음 내 현재 코드가 작동하지 않습니다 1.간단한 이미지 체인저 onclick가 작동하지 않습니까?

으로 돌아갑니다 "2avatar"을 "1avatar"로 변경 이유 :(

HTML :

<!DOCTYPE html> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="stylesheet.css"> 
<script type="text/javascript" src="system.js"></script> 
<script> 
</script> 
</head> 
<body> 

<h2>Login</h2> 

<button onclick="document.getElementById('id01').style.display='block'" style="width:auto;">Login</button> 

<div id="id01" class="modal"> 

    <form class="modal-content animate"> 
    <div class="imgcontainer"> 
     <span onclick="document.getElementById('id01').style.display='none'" class="close" title="Close Modal">&times;</span> 
     <img src="1avatar.jpg" height="80px" id="avatar" onclick="change(this)"alt="Avatar" class="avatar"> 
    </div> 

    <div class="container"> 
     <label><b>Username</b></label> 
     <input type="text" placeholder="Enter Username" name="uname" required> 

     <label><b>Password</b></label> 
     <input type="password" placeholder="Enter Password" name="psw" required> 

     <button type="submit" onclick="check(this.form)">Login</button> 
     <input type="checkbox" checked="checked"> Remember me 
    </div> 

    <div class="container" style="background-color:#f1f1f1"> 
     <button type="button" onclick="document.getElementById('id01').style.display='none'" class="cancelbtn">Cancel</button> 
    </div> 
    </form> 
</div> 
</body> 
</html> 

CSS :

/* Full-width input fields */ 
input[type=text], input[type=password] { 
    width: 100%; 
    padding: 12px 20px; 
    margin: 8px 0; 
    display: inline-block; 
    border: 1px solid #ccc; 
    box-sizing: border-box; 
} 

/* Set a style for all buttons */ 
button { 
    background-color: #4CAF50; 
    color: white; 
    padding: 14px 20px; 
    margin: 8px 0; 
    border: none; 
    cursor: pointer; 
    width: 100%; 
    align-items: center; 
} 
html { 
    background-color: #333; 
} 
h2 { 
    text-align: center; 
    color:white; 
} 
button:hover { 
    opacity: 0.8; 
} 

/* Extra styles for the cancel button */ 
.cancelbtn { 
    width: auto; 
    padding: 10px 18px; 
    background-color: #f44336; 
} 

/* Center the image and position the close button */ 
.imgcontainer { 
    text-align: center; 
    margin: 24px 0 12px 0; 
    position: relative; 
} 

img.avatar { 
    width: 80px; 
    border-radius: 50%; 
} 

.container { 
    padding: 16px; 
} 

span.psw { 
    float: right; 
    padding-top: 16px; 
} 

/* The Modal (background) */ 
.modal { 
    display: none; /* Hidden by default */ 
    position: fixed; /* Stay in place */ 
    z-index: 1; /* Sit on top */ 
    left: 0; 
    top: 0; 
    width: 100%; /* Full width */ 
    height: 100%; /* Full height */ 
    overflow: auto; /* Enable scroll if needed */ 
    background-color: rgb(0,0,0); /* Fallback color */ 
    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */ 
    padding-top: 60px; 
} 

/* Modal Content/Box */ 
.modal-content { 
    background-color: #fefefe; 
    margin: 5% auto 15% auto; /* 5% from the top, 15% from the bottom and centered */ 
    border: 1px solid #888; 
    width: 80%; /* Could be more or less, depending on screen size */ 
} 

/* The Close Button (x) */ 
.close { 
    position: absolute; 
    right: 25px; 
    top: 0; 
    color: #000; 
    font-size: 35px; 
    font-weight: bold; 
} 

.close:hover, 
.close:focus { 
    color: red; 
    cursor: pointer; 
} 

/* Add Zoom Animation */ 
.animate { 
    -webkit-animation: animatezoom 0.6s; 
    animation: animatezoom 0.6s 
} 

@-webkit-keyframes animatezoom { 
    from {-webkit-transform: scale(0)} 
    to {-webkit-transform: scale(1)} 
} 

@keyframes animatezoom { 
    from {transform: scale(0)} 
    to {transform: scale(1)} 
} 

/* Change styles for span and cancel button on extra small screens */ 
@media screen and (max-width: 300px) { 
    span.psw { 
     display: block; 
     float: none; 
    } 
    .cancelbtn { 
     width: 100%; 
    } 
} 

JAVASCRIPT :

// Get the modal 
var modal = document.getElementById('id01'); 



// When the user clicks anywhere outside of the modal, close it 
window.onclick = function(event) { 
    if (event.target == modal) { 
     modal.style.display = "none"; 
    } 
} 

function check(form) { 
    if (form.uname.value == "04ep11" && form.psw.value == "7D") { 
     alert("It worked") 
    } 

} 

function change(img) { 
    if (img.src == "1avatar.jpg") { 
     img.src = img.src.replace("2avatar"); 
    } 
    if (img.src == "2avatar.jpg") { 
     img.src = img.src.replace("3avatar"); 
    } 
    if (img.src == "3avatar.jpg") { 
     img.src = img.src.replace("4avatar"); 
    } 
    if (img.src == "4avatar.jpg") { 
     img.src = img.src.replace("5avatar"); 
    } 
    if (img.src == "5avatar.jpg") { 
     img.src = img.src.replace("1avatar"); 
    } 
} 
+0

대체 할 값과 교체 할 값 및 새로운 값 – StefanBob

답변

1

이 시도 : 위의 하나가 완벽하게 작동했다

function change(img) { 
    if (img.src == "1avatar.jpg") { 
     img.src = img.src.replace("1avatar.jpg", "2avatar.jpg"); 
    } 
    if (img.src == "2avatar.jpg") { 
     img.src = img.src.replace("2avatar.jpg", "3avatar.jpg"); 
    } 
    if (img.src == "3avatar.jpg") { 
     img.src = img.src.replace("3avatar.jpg", "4avatar.jpg"); 
    } 
    if (img.src == "4avatar.jpg") { 
     img.src = img.src.replace("4avatar.jpg", "5avatar.jpg"); 
    } 
    if (img.src == "5avatar.jpg") { 
     img.src = img.src.replace("5avatar.jpg", "1avatar.jpg"); 
    } 
} 
0
function change(img) 

{ 

    var str = img.src; 

    var res = str.substring((str.length - 11),(str.length - 10)); 

    var ress = Number(res); 

    var subi; 

     if(ress == "5"){ 

     subi = str.replace(5, 1); 

     } else { 

     subi = str.replace(ress, (ress+1)); 

     } 

    document.getElementById("avatar").src= subi; 

} 

. 그러나 그것은 어떤 이유로 든 이것을 점검하지 않을 것이며, 또한 잘 작동합니다.

먼저이

<img src="1avatar.jpg" height="80px" id="avatar" onClick="Change_Img()"alt="Avatar" class="avatar"> 

처럼 HTML을 변경 그리고 자바 스크립트

function Change_Img() 

{ 

    var x = document.getElementById("avatar").src; 


    var n; 


     for(a=1;a<6;a++){ 

     var nn = x.indexOf(a); 

     if(nn > 0){ 
       n = a; 
      } 

     } 

var subi; 

if(n == "5"){ 
    subi = x.replace("5", "1"); 
} else { 
    subi = x.replace(n, (n+1)); 
} 



    document.getElementById("avatar").src= subi; 

} 
+0

나는 이것을 시도했지만 아무 일도 없었습니까? –

+0

게시하기 전에 내 로컬 호스트에서이 개인적으로 시도했는데 오류가 무엇인지 알 수 있습니다. – Subi

2

기능 replace가 왜 처음에 replace를 사용하는 다른 사람들이 지적으로 2 개 개의 인수를 취하는하지만? replace을 사용하면 텍스트 내에서 검색하고 일부를 대체 할 수 있지만 전체 텍스트를 바꾸기 때문에 직선 할당을하는 것이 더 효율적이고 더 깨끗합니다. 또한 이러한 코드에서는 if 문장 대신에 switch을 사용하는 것이 더 읽기 쉽습니다.

편집 : 당신이 이미지를 src 속성에 액세스 할 때, 그것은 전체 경로, 당신은 (예를 들어, "1avatar.jpg") HTML에있는 값뿐만 아니라있을 것이라는 점을 참고. 따라서 평등 검사가 실패합니다. 파일 이름은 첫 번째 문자를 제외한 모두 동일하기 때문에,

function change(img) { 
    var name = img.src.substr(-11); //Take the last 11 characters. 
    switch (name) { 
    case "1avatar.jpg": 
     img.src = "2avatar.jpg"; 
     break; 
    case "2avatar.jpg": 
     img.src = "3avatar.jpg" 
     break; 
    case "3avatar.jpg": 
     img.src = "4avatar.jpg"; 
     break; 
    case "4avatar.jpg": 
     img.src = "5avatar.jpg"; 
     break; 
    case "5avatar.jpg": 
     img.src = "1avatar.jpg"; 
     break; 
    } 
} 

또는 : 그를 해결하려면 파일 이름의 문자 수 인 src 값의 마지막 11 자을 이미지가 코드에 해당하는 제안 HTML 파일과 동일한 디렉토리에있는 경우, 당신은 필요가 없습니다

function change(img) { 
    var num = img.src.substr(-11, 1); //Extract the fist character of the file name. 
    num = parseInt(num); //Convert it to a number. 

    if (num < 5) 
    num++; //When less than 5, increment it by 1. 
    else 
    num = 1; //When it is 5, go back to 1. 

    img.src = num + "avatar.jpg"; 
} 
+0

시도해도 아무 반응이 없습니다. ( –

+0

다시 정의한 직후 ** alert (num) **를 추가하면 num = parseInt (num)). NaN이 무엇입니까? –

+0

'src' 속성에 액세스하려고하면 이미지 파일 이름뿐만 아니라 전체 경로가 있기 때문에 설명과 솔루션을 보려면 내 편집을 참조하십시오. –

0

: 1과 5 사이의 숫자, 당신은 수학적으로 증가하여 첫 번째 문자를 대체 할 수 replace(). 이미지가 같은 디렉토리에없는 경우

for (var i = 1, newImage; i <= 5; i++) { 
    newImage = (i === 5) ? 1 : i+1; 
    if (img.src === i + 'avatar.jpg') { 
     img.src = newImage + 'avatar.jpg'; 
    } 
} 

, 당신은 img.srcxavatar.jpg에 비교하는 항상이 경우 false를 반환합니다 것을 명심 그러나, replace()를 사용해야합니다; src은 다음과 같을 것입니다 : path/to/my/img/xavatar.jpg.모든 이미지는 JPG를이 /xavatar.jpg$/ 같은 간단한 정규식을 만드는 것입니다, 그리고 test()를 사용하는 가정,

if (img.src === 'path/to/my/img/' + i + 'avatar.jpg') { 

이 또 다른 솔루션을 :

쉬운 해결책은 예를 들어, 비교의 전체 경로를 사용하는 것입니다 당신의 상태를 확인하십시오.

for (var i = 1, newImage, regex; i <= 5; i++) { 
    regex = new RegExp(i + 'avatar.jpg$'); 
    newImage = (i === 5) ? 1 : i+1; 
    if (regex.test(img.src)) { 
     img.src = img.src.replace(i + 'avatar.jpg', newImage + 'avatar.jpg'); 
    } 
} 
관련 문제