2011-03-23 56 views
0

我發現了一個螢火錯誤:缺失:在JQuery.inArray屬性ID(值,數組)後

丟失:屬性ID 誤差源極線之後:

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

這是surrunding代碼:

編輯帖子更新,因爲我不清楚。 我正在嘗試創建一個爲項目創建對話框的框架。 在對話框中可以有四個預定義的按鈕。 mmDialogBu​​tton是我對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(); 
        } 
       } 
      }... 

mmDialogBu​​tton.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

第二個代碼段中的語法錯誤。你想在那裏做什麼? – 2011-03-23 14:50:29

+0

['$ .inArray'](http://api.jquery.com/jQuery.inArray/)在找不到項目時回退'-1'。 'if(jQuery.inArray(mmDialogBu​​tton.CANCEL,buttons)!= -1)' – 2011-03-23 14:52:42

+0

你有一個按鈕對象,其中包含一些可能的函數和其他在同一範圍內定義的稱爲「按鈕」的變量? – Nikhil 2011-03-23 14:53:22

回答

1

我想你的意思執行「關閉」只有取消是按鈕,如果是這種情況,你可以這樣寫:

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

編輯:

可以定義按鍵字典事先爲你喜歡,傳球它.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

非常感謝,工作得很好。只有很小的一點是,Cancel是未定義的,我必須將if條件更改爲!= -1。 JQuery應該返回一個帶有這種方法名稱的布爾值:) – Farmor 2011-03-23 16:52:29

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; 
    })() 

雖然這很難說。它是什麼看起來像你試圖做的是有條件地設置「按鈕」屬性與標籤處理程序(即一點「關閉」功能)的某些對象。但是,您發佈的代碼在語法上無意義。我所做的更改在匿名函數中包含「inArray」測試,僅在該測試爲true時返回按鈕對象。

再次,我只是猜測這就是你想要做的。