получить доступ к объекту, созданному конструктором, используя jquery - PullRequest
0 голосов
/ 09 января 2010

У меня есть функция jquery, которая создает диалоговое окно из обычной функции javascript для каждого выбранного элемента. Один из вариантов, который я хочу реализовать, - добавить кнопки в диалоговое окно. эти кнопки могли бы иметь любую назначенную им функцию.

Моя проблема в том, как получить доступ к окну, в котором кнопки создаются на событии onclick или около этой кнопки

вот как я могу создать диалоговое окно:

$('.box').dialogbox({  buttons: { 'click': function () {
    $(self).css({background:'red',border:'2px solid black'}) 
}, } });

в этом случае я использовал $(self) для доступа к самой коробке, зная, что это не правильный путь. но это часть, которую мне нужно исправить.

Кстати,

self объявлено как личная переменная для диалогового окна функции, которое вызывается функцией jquery $.dialogbox следующим образом:

newBox = new dialogbox ( content)

пс. Я прошу прощения за то, что не возможно быть более ясным. пожалуйста, задавайте мне вопросы, если вам нужна дополнительная информация

спасибо

Ответы [ 3 ]

0 голосов
/ 09 января 2010

Я полагаю, что проблема, которую вы описываете, та же, что и здесь, которую я задал на днях: как ссылаться на объект, находящийся вне области действия из-за вложения функций (и, в частности, привычки jQuery переопределять значение this.

Решение, которое было предложено мне и которое я нашел наиболее полезным, состояло в том, чтобы использовать библиотеку прототипов Function.bind для вызова функций в определенном контексте, который вы можете указать.

Подробнее о том, как это работает, проверьте мой вопрос: Сохранение ссылки на "this" в функциях-прототипах JavaScript

0 голосов
/ 11 января 2010

после того, как я получил отличный отзыв, я хотел широко реализовать эту опцию, используя jquery вот мое решение:

$. Fn.bindFunction = function (fn) {

fn.apply (это);

};

как бы вы назвали это

$ (это) .bindFunction (п).

Надеюсь, это поможет тем пользователям jquery

0 голосов
/ 09 января 2010

В точке, где вызывается $.dialogbox(), у нас нет ничего, что ссылалось бы на отдельный элемент / объект диалогового окна. $('.box') ссылается на коллекцию диалогов на странице, а this внутри обработчика щелчка ссылается на кнопку.

Один из подходов состоит в том, чтобы определить местонахождение диалога как предка кнопки. jQuery's closest() возвращает ближайшего предка элемента, соответствующего селектору. Например:

$('.box').dialogbox({
    buttons: { 'click': function() {
        self = $(this).closest('.box');
        self.css({
            background: 'red',
            border: '2px solid black'
        });
    }}
 });

Некоторые мысли:

  • В отличие от this, self не имеет предопределенного значения в javascript или jQuery. Это просто имя переменной. Если вы используете его, вы должны присвоить ему значение.

  • Использование self может вводить в заблуждение в этом контексте - относится ли это к диалогу или кнопке? Возможно, вы захотите назвать его dialog или похожим.

  • Также обратите внимание, что если вы используете диалоговое окно jQueryUI, вы, вероятно, намеревались написать .dialog() ( см. Ref ), а не .dialogbox().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...