2016-07-02 4 views
1

Мой код выглядит следующим образом:Отправка параметра для анонимной функции

var x = $(function(){ 
    $('.lobipanel-basic').lobiPanel({ 
     "state": "unpinned", 
     "resize": "both", 
     "reload": false, 
     "unpin": false, 
     "editTitle": false 
    }); 
}); 

x(); 

Это работает просто отлично. Что делать, если я хочу отправить параметр для функции x(). В принципе я не хочу, по понятным причинам, жесткого кода имя класса .lobipanel-basic.

Спасибо.

+1

Вы можете просто указать параметр функции, как обычно. Также обратите внимание, что у вас есть не IIFE. Вы просто предоставляете анонимную функцию обработчику события document.ready jQuery. –

+0

Что такое «очевидные причины» *? Это звучит как проблема XY – charlietfl

ответ

1

Если все, что вы хотите, это функция, которая может инициализировать плагин, передавая в селекторе просто сделать:

function initPanel(selector){ 
    $(selector).lobiPanel({ 
     "state": "unpinned", 
     "resize": "both", 
     "reload": false, 
     "unpin": false, 
     "editTitle": false 
    }); 
} 

$(function(){ 
    initPanel('.lobipanel-basic'); 
}); 

Или хранить параметры в объекте и сделать что-то вроде:

var panelOpts = { 
    "state": "unpinned", 
    "resize": "both", 
    "reload": false, 
    "unpin": false, 
    "editTitle": false 
}; 

$(function(){ 
    $('.lobipanel-basic').lobiPanel(panelOpts); 
}); 
+0

, это работает, но я хочу, чтобы какая-то вызываемая функция принимала '.lobipanel-basic'' в качестве параметра, чтобы я мог вызвать как можно больше экземпляров динамически –

+0

И не то, что функция, которую я показал делает? Вам действительно нужно определить ваш прецедент лучше – charlietfl

+1

Обратите внимание, что большинство правильно написанных плагинов будут вызывать 'each' внутри них, поэтому все элементы с этим классом будут затронуты. В противном случае используйте ваши собственные 'each', если они не написаны для нескольких экземпляров – charlietfl

0

с помощь @charlietfl я мог бы решить с помощью следующего кода

function showPanel(panelClassName){ 
var panelOpts = { 
    "state": "unpinned", 
    "resize": "both", 
    "reload": false, 
    "unpin": false, 
    "editTitle": false 
}; 

$(function(){ 
    $(panelClassName).lobiPanel(panelOpts); 
    }); 
} 

showPanel('.lobipanel-basic'); 

@charlietfl: я хотел, чтобы загрузить панель нажатием одной кнопки. теперь я могу назначить функцию showPanel при нажатии кнопки.

спасибо

+0

, так зачем писать новый ответ, дублирующий то, что я вам дал? Правильная вещь будет принимать ответ, который помог вам добраться до этого – charlietfl

+0

Я обобщил имя класса в ответе, который я опубликовал. хотя 80% кода - ур. –

+1

вам не нужно '$ (function() {', если это используется в обработчике кликов и 'generalized' ... вы просто изменили имя переменной, которое не имеет значения. Просто не правильный этикет, чтобы опубликовать новый ответ, который составляет почти 100 % от другого ответа – charlietfl

Смежные вопросы