2011-03-23 2 views
0

Je reçois une erreur de Firebug:: manquant après id propriété JQuery.inArray (valeur, tableau)

: manquant après identification de la propriété erreur ligne de source:

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

C'est le surrunding code:

Édition post avec mise à jour car je n'étais pas clair. J'essaye de créer un cadre pour créer des dialogues pour un projet. Dans les boîtes de dialogue, il peut y avoir quatre boutons prédéfinis. Le mmDialogButton est ma tentative d'une classe ENUM. L'instruction if est là pour activer les boutons que l'utilisateur voulait utiliser dans la boîte de dialogue.

Voici un peu plus de code à illustrer.

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 Page

  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

Le deuxième extrait de code a des erreurs de syntaxe. Qu'essayez-vous de faire là-bas? –

+0

['$ .inArray'] (http://api.jquery.com/jQuery.inArray/) rétablit' -1' lorsqu'un élément est introuvable. 'if (jQuery.inArray (mmDialogButton.CANCEL, boutons)! = -1)' –

+0

Vous avez probablement un objet contenant des fonctions et d'autres variables appelées "boutons" définies dans la même portée? – Nikhil

Répondre

1

Je pense que vous voulez dire pour exécuter la « fermer » seulement si ANNULER est dans les boutons, si c'est le cas, vous pouvez écrire:

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

EDIT:

vous pouvez définir les boutons dictionnaire au préalable comme vous aimez, le passer à .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

Merci beaucoup a bien fonctionné. Seulement petit c'était Annuler était indéfini et que je devais changer la condition if à! = -1. JQuery devrait retourner un booléen avec un tel nom de méthode :) – Farmor

2

Ce:

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

devrait probablement être:

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

mais c'est difficile à dire. Qu'est-ce que ressemble comme vous essayez de faire est conditionnellement défini que la propriété "boutons" à un objet avec un gestionnaire étiqueté (cette petite fonction "fermer"). Cependant, le code que vous avez posté est syntaxiquement absurde. La modification que j'ai faite enveloppe le test "inArray" dans une fonction anonyme qui retourne l'objet bouton seulement lorsque ce test est true.

Encore une fois, je devine juste que c'est ce que vous essayiez de faire.

Questions connexes