2011-03-23 6 views
0

오류가 발생했습니다 :누락되었습니다 : JQuery.inArray의 속성 ID 이후 (value, array)

누락 : 속성 ID 오류 소스 행 :

if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 

이것은 확장 코드입니다.

잘 알려지지 않았으므로 업데이트 된 게시물을 편집했습니다. 프로젝트 대화 상자를 만들기위한 프레임 워크를 만들려고합니다. 대화 상자에는 미리 정의 된 네 개의 단추가있을 수 있습니다. mmDialogButton은 ENUM 클래스에 대한 나의 시도입니다. if 문은 사용자가 대화 상자에서 사용하기를 원하는 버튼을 활성화합니다.

설명 할 코드가 더 있습니다.

mmDialog.js

... 

function mmDialog(title, spawnerId, widget, buttons){ 
... 
$dialog.html(widget.getInitialHTML()) 
     .dialog({ 
      autoOpen: false, 
      title: title + ' <img id="myJquerySpinner" />', 
      buttons: { 
       if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 
        Cancel: function() { 
         $(this).dialog("close"); 
        }, 
       } 
       if(jQuery.inArray(mmDialogButton.NEXT, buttons)){ 
        "Next": function() { 
         widget.doNext(); 
        }, 
       } 
       if(jQuery.inArray(mmDialogButton.PREVIOUS, buttons)){ 
        "Previous": function() { 
         widget.doPrevious(); 
        }, 
       } 
       if(jQuery.inArray(mmDialogButton.OK, buttons)){ 
        "Ok": function() { 
         widget.doOk(); 
        } 
       } 
      }... 

mmDialogButton.js

function mmDialogButton(){ // Constructor 

} 

mmDialogButton.CANCEL = function() { return "mmDBCancel"; }; 
mmDialogButton.OK = function() { return "mmDBOk"; }; 
mmDialogButton.NEXT = function() { return "mmDBNext"; }; 
mmDialogButton.PREVIOUS = function() { return "mmDBPrevious"; }; 

jsp/html 페이지

   var title = "Test Dialog"; 
      var spawnerId = "myJqueryStarter"; 

      var mmDialogButtons = new Array(); 
      mmDialogButtons[0] = mmDialogButton.CANCEL; 
      mmDialogButtons[1] = mmDialogButton.OK; 
      mmDialogButtons[2] = mmDialogButton.NEXT; 
      mmDialogButtons[3] = mmDialogButton.PREVIOUS; 

      myPublishWidget = new mmPublishWidget(); 
      myDialogPublishWidget = new mmDialogWidget(myPublishWidget); 
      myDialog = new mmDialog(title, spawnerId, myDialogPublishWidget , mmDialogButtons); 
+1

두 번째 코드 스 니펫은 구문 오류가 있습니다. 너 거기서 뭘하려고하는거야? –

+0

['$ .inArray'] (http://api.jquery.com/jQuery.inArray/) 항목을 찾을 수 없을 때'-1'을 반환합니다. if (jQuery.inArray (mmDialogButton.CANCEL, buttons)! = -1)' –

+0

아마도 몇 가지 함수를 포함하는 buttons 객체와 동일한 범위에 정의 된 "buttons"이라는 다른 변수가 있을까요? – Nikhil

답변

1

가 나는 경우 만약 당신이 쓸 수있는 당신이 버튼에 취소하는 경우에만 "닫기"를 실행하는 것을 의미 생각 당신이 좋아한다면, 패스는 .dialog( :

dialog_buttons = {} 

if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 
dialog_buttons[Cancel] = function() { 
          $(this).dialog("close"); 
          } 
} 

if(jQuery.inArray(mmDialogButton.NEXT, buttons)){ 
dialog_buttons["Next"] = function() { 
          widget.doNext(); 
          } 
} 

if(jQuery.inArray(mmDialogButton.PREVIOUS, buttons)){ 
dialog_buttons["Previous"] = function() { 
           widget.doPrevious(); 
           } 
} 

if(jQuery.inArray(mmDialogButton.OK, buttons)){ 
dialog_buttons["Ok"] = function() { 
          widget.doOk(); 
         } 
} 

$dialog.html(widget.getInitialHTML()) 
     .dialog({ 
      autoOpen: false, 
      title: title + ' <img id="myJquerySpinner" />', 
      buttons: dialog_buttons 
      }... 
+0

대단히 감사합니다. 단지 이것이 작은 것은 취소가 정의되지 않았고 if 조건을! = -1로 변경해야한다는 것입니다. JQuery는 그런 메소드 이름을 가진 부울을 리턴해야합니다 :) – Farmor

2

이 :

buttons: { 
    if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 
     Cancel: function() { 
     $(this).dialog("close"); 
    }, 

은 다음과 같아야합니다.

buttons: (function() { 
    if(jQuery.inArray(mmDialogButton.CANCEL, buttons)) 
     return { 
     Cancel: function() { 
      $(this).dialog("close"); 
     } 
     }; 
     return null; 
    })() 

말해 주긴 힘들지만. 그것은 무엇입니까 보이는 것처럼 조건부로 레이블 된 처리기 (그 작은 "닫기"함수)와 함께 일부 개체에 "버튼"속성을 설정하려고합니다. 그러나, 게시 한 코드는 문법적으로 무의미합니다. 내가 만든 변경 사항은 테스트가 true 일 때만 버튼 객체를 반환하는 익명 함수에서 "inArray"테스트를 래핑합니다.

다시 말하지만, 나는 그게 당신이하려는 일이라고 추측합니다.

buttons: { 
    Cancel: function() { 
       if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 
       $(this).dialog("close"); 
       } 
      }, 
    .... 

편집 :

당신은 버튼 사전을 사전에로 정의 할 수 있습니다