2010-01-09 2 views
1
$.widget("ui.myWidget", { 
    _init: function() { 
     //start 
     alert('Hello World!!!'); 
    } 
} 

Je le widget/ui ci-dessusjQuery UI nouveau problème

quand je l'appelle comme si ...

<div onclick="$('#id').myWidget()"> 
    Click Me 
</div> 

i obtenir le "Bonjour tout le monde !!!" boîte d'alerte. si je clique dessus encore rien ne se passe. Je ne sais pas si im manque quelque chose ... mais j'ai besoin de l'interface utilisateur pour alerter chaque fois que je clique sur la div.

Note: Ceci est un code court pour simplifier et le rendre facile à comprendre ....

+0

Je suppose que init est exécuté qu'une seule fois. – fmsf

+0

que se passe-t-il si je renommer init en quelque chose d'autre ou ajouter une autre fonction en dessous et appeler la fonction ci-dessous init chaque? – Val

Répondre

2

Vous appelez le widget dans le mauvais sens. Vous voulez que votre élément devienne votre widget, vous devez donc définir votre élément de widget comme vous le feriez pour n'importe quel autre widget de jQuery UI, c'est-à-dire. $('element').scrollable(), .draggable(), etc.

A l'intérieur de votre deletion de widget, vous voulez définir tous les écouteurs et les événements pour chaque élément auquel le widget est défini. Donc, si vous voulez que quelque chose se déclenche au clic de votre élément de widget, vous devez définir un événement de clic sur this.element, en référence à l'élément de widget en cours, dans ce cas votre div.

La fonction _init est appelée une seule fois, comme tout le monde l'a dit, lors de l'initialisation de votre widget. Cependant, si vous le configurez correctement, l'événement click doit se déclencher à chaque clic de votre élément. Cela devrait aider.

HTML:

<div id="hello_world">Click Me</div> 

JS:

$.widget("ui.myWidget", { 
    _init: function() { 
    //start 
    this._show(); 
    var thisWidget = this; 
    this.options.handler.click(function(){ 
     thisWidget._show(); 
    }); 
    }, 
    _show: function(){ 
    alert('Hello World???'); 
    } 
}); 

$('div#click_me').click(function(){ 
    $('#id').myWidget({handler: $(this)}); 
}); 
+0

ce n'est pas wot j'ai besoin ... mais j'ai découvert que si j'utilise ce 'onclick =" $ ('# id'). myWidget(). myWidget ('publicFoo') "' si 'publicFoo: function() {alert ('Hello World');}' existe, il l'appellera à chaque fois. mais il semble plutôt moche ... – Val

+0

Ouais, ce n'est pas le comportement normal d'un widget. Peut-être que vous cherchez une fonction jquery? Qu'est-ce que le widget est censé faire? – munch

+0

son signifié être une fenêtre comme widget. comme la boîte de dialogue plus ou moins mais avec le bouton minimiser et maximiser, donc si je ferme la fenêtre ... le n cliquez sur ce div: cliquez sur moi devrait créer à nouveau la fenêtre à partir de zéro (si cliqué à nouveau) qui est. – Val

0

__init est exécuté qu'une seule fois. Faites une autre fonction pour faire ce que vous avez réellement besoin de faire. Il y a une bonne introduction here

donc dans la tête ajouter le widget que vous êtes maintenant, mais avec une fonction supplémentaire pour faire le sale boulot puis changer le onclick à quelque chose le long des lignes de $('#id').myWidget.myAlertFunction()

+0

essayé que cela n'a pas fonctionné ... :( – Val

+0

qui est vieux, déroutant comme l'enfer, green1, green2 j'ai perdu le compte combien de greens ... il n'explique pas si c'est tout un widget ou un certain nombre de widgets pour moi il ressemble à un tas de codes (qui ne fonctionnent pas toujours) même sur cette page quand vous cliquez sur certains des boutons ... – Val