2009-07-11 5 views
0

표준 양식의 html을 반환하는 메서드가 포함 된 javascript 객체를 작성하는 중입니다. 이 객체에는 validate() 메서드가 있습니다. validate();를 사용하여 양식을 생성하고 싶습니다.자바 스크립트에서 문자열로 함수를 반환

그래서 유효성 검사 형태의 전형적인 HTML은 아마도 다음과 같을 것이다 :

<form id="a" onSubmit="return validate();"> 

문제는 내가 너무 더 onSubmit="my_object.validate();">처럼 될 필요가 개체의 인스턴스를 참조 할 수 있어야한다는 것입니다

나는 return '<form id="a" onSubmit="return ' + this.validate + '();">'; 과 같은 것을 시도했지만 정말 이상한 행동을합니다.

validate 함수를 임의로 true로 설정하면 양식이 제출되고 false이면 양식이 제출되지 않습니다. 방법에서 다른 계산을하면이 오류가 발생합니다.

> Error: syntax error Source Code: 
>  return id == 

경험이있는 사람이 있습니까?

답변

-2

사용 평가는()와 같은 문자열을 실행하기 위해 자바 스크립트

당신이 전화 this.validate 제출에 다음 양식을 프로토 타입 할 필요가 다음과 같이 [편집} 사운드를(). javascript를 사용하여 양식 객체를 작성할 때 양식 객체에 대한 참조를 가져온 다음 유효성 검사를위한 메소드를 정의하고이를 validate 특성에 지정하십시오.

+0

"eval()"을 사용하는 것보다 더 좋은 방법이 있어야합니다. –

+0

의심 할 여지없이 문자열 값이있는 경우 실행 방법을 다른 방법으로 바꿀 수 있습니까? –

+0

@Dave Anderson : 실행해야하는 문자열 값으로 끝내지 않으려 고합니다.;) –

5

오히려 HTML 속성에 이벤트 핸들러를 출력하는 대신, 출력 할 HTML이 양식 객체에 대한 참조를 얻을 수 있습니다, 다음과 같이 프로그램 이벤트 핸들러를 첨부 :이 게시

<html> 
    <head> 
    <script type="text/javascript"> 
     var my_object = { 
      outputForm: function(container) { 
       container.innerHTML = 
        '<form id="a"><input type="submit" value="Validate" /></form>'; 
       this.createdForm = document.getElementById('a'); 
       this.createdForm.onsubmit = this.validate; 
      }, 
      validate: function() { 
       // use this.createdForm to get at the controls. 
       alert("Who dares awake my slumber?"); 
      } 
     }; 

     function createTheForm() { 
      my_object.outputForm(document.getElementById('container')); 
     } 
    </script> 
    </head> 
    <body onload="createTheForm()"> 
    <div id="container"></div> 
    </body> 
</html> 
0

죄송합니다 답변으로 등록 후 원래의 게시물을 비 등록 사용자로 편집 할 수 없습니까?

나는 eval에 대해 생각했지만이 상황에서도 사용하는 방법을 모르겠다. 나는 그것을 이렇게 시도했다

' onSubmit="return eval(' + this.validate+'();)">'; 

및 다른 몇몇 변이 그러나 나는 동일한 과실을 얻는다.

이벤트 처리를 수동으로 추가하는 것을 피하고 싶습니다. 꽤 자체적으로 포함하고 싶습니다. 나는이 할 my_function에 다음

' onSubmit="return my_function(' + this + ');">'; 

같은 것을 객체의 외부에 앉아 일반 기능을 설정하고 다음 일에 대해 생각했다 :이 끔찍한 해킹처럼 보인다

my_function(given){ return given.validate(); } 

을하고 난 그것이 작동하는지조차 확실하지 않습니다.

0

왜 페이지에 추가하고 클로저를 사용하여 범위를 유지 한 후에 요소에 적용하는 것이 아닙니다.

var myId = "bar" + index; 
foo.innerHTML="<form id='" + myId + "'>...</form>"; 
var that = this; 
document.getElementById(myId).onsubmit = function(){ that.validate(this); } 

마크 업에 이벤트 처리기를 추가하는 것은 항상 나쁜 생각입니다.

관련 문제