2013-09-04 2 views
-3

중요 : onclick 특성을 사용해야합니다. 필자의 경우 이벤트 수신기/핸들러에서 Jquery를 사용하는 것은 옵션이 아닙니다. 왜? 내 코드에는 특성과 코드의 표현에 의존하는 많은 다른 것들이 있습니다.JavaScript 함수가 onclick 속성에서 올바르게 호출되지 않습니다.

onclick에 경고를 넣어 예상 경고가 팝업 창에 표시되고 false를 반환 버튼을 눌러 제출되는 양식을 방지대로 작동 속성 :

<script> 
    $().ready(function() { 
     $('.pretty .prettycheckbox').click(function() { 

      var myType = $('.pretty .prettycheckbox').find("input[class^=car-type]:checked").val(); 

      if (myType == 1) { 
       $('#sendButton').attr("onclick", "alert('Direct!'); return false;"); 
      } 

      if (myType == 2) { 
       $('#sendButton').removeAttr("onclick"); 
      } 

     }); 
    }); 
</script> 

을하지만 경우에 작동하지 않습니다 onclick을 atttribute 등으로부터 함수를 호출 :

<script> 
    $().ready(function() { 
     $('.pretty .prettycheckbox').click(function() { 

      var myType = $('.pretty .prettycheckbox').find("input[class^=car-type]:checked").val(); 

      if (myType == 1) { 
       $('#sendButton').attr("onclick", "submitDB(); return false;"); 
      } 

      if (myType == 2) { 
       $('#sendButton').removeAttr("onclick"); 
      } 

     }); 
    }); 
</script> 

<script> 
    $().ready(function(){ 
     function submitDB() { 
      alert('From function!'); 
     } 
    }); 
</script> 

어떤 생각을 왜?

왜 함수가 무시됩니까?

+3

jQuery를 사용하고 있고, 이벤트 핸들러를 바인드하는 데'on'을 사용하고, 이벤트 핸들러 속성을 추가하지 마십시오. – zzzzBov

+0

@zzzzBov 'onclick' 속성을 사용해야합니다. –

+1

@JimmyHendrikz ** 이유. ** 정상적인 클릭 이벤트가 아니라 onclick을 추가해야하는 이유는 수정해야 할 다른 문제 때문일 가능성이 큽니다. –

답변

7

큰 범위의 문제가있어 코드가 작동하지 않습니다. onclick 속성은 전역 범위에있는 함수 만 대상으로 할 수 있습니다. 귀하의 경우 귀하의 기능이 글로벌 범위에 없습니다.

<script> 
    $().ready(function(){ 
     function submitDB() { 
      alert('From function!'); 
     } 
    }); 
</script> 

는해야

<script> 
     function submitDB() { 
      alert('From function!'); 
     } 
</script> 

데모 : http://jsfiddle.net/ZeLXY/

"학교"onclick을 jQuery를 사용하여 속성을 추가하는 방법을 가르치려고 왜 난 아직도 이해가 안 돼요.자바 스크립트가있는 요소에 onclick 특성을 추가하고 싶지는 않을 것입니다. jQuery는 훨씬 적습니다.

3

길고 짧은 것은 잘못하고 있다는 것입니다.

당신은 (예 : click로, 또는 적절한 별칭), 요소에 이벤트 처리기를 바인딩 on을 사용하려면 :

$('#sendButton').on('click', function() { 
    alert('Direct!'); 
    return false; 
}); 

이 절대적으로 onclick 속성을 사용하는 이유 없다, 또는 시도하는 그러한 속성을 동적으로 설정하십시오.

는 이벤트 핸들러 바인딩을 해제 off를 사용하려면

$('#sendButton').off('click'); 
+0

@JimmyHendrikz, 당신의 업데이트가 주어진다면, 당신은 여전히 ​​그것을 잘못하고 있습니다. *** 절대로 *** onclick에 의존하지 마십시오. 또는 기타 이러한 이벤트 속성을 사용하면 신뢰할 수 없습니다. – zzzzBov

1

이 시도 :

if (myType == 1) { 
    $('#sendButton').on("click", function() { 
     alert("clicked"); //sorry forgot to edit the callback in! 
    }); 
} 
if (myType == 2) { 
    $('#sendButton').off("click"); 
} 

당신이 jQuery를 사용하지 않는, onclick을 사용해야하는 경우.

1

그건 좋지 않습니다. 속성을 변경하지 않는 요소에 이벤트를 바인드해야합니다.

$('#sendButton').off("click").on("click", submitDB); 

난 그냥 문제 발견 ->http://jsfiddle.net/VJSRy/ 을 즉 이 접근법을 잘못 사용하고 싶다면, 함수를 전역 적으로 정의해야합니다. 예 :

submitDB = function() { 
    alert('From function!'); 
} 

즉. submit25 앞의 문자를으로 건너 뛰십시오.

+1

속성 앞에 javascript :'가 붙지 않아도됩니다. – zzzzBov

+0

동의합니다. – Krasimir

+0

감사합니다.하지만 submitDB() 함수가 트리거되지 않습니다 ( –

관련 문제