вызов пользовательской функции с параметрами - PullRequest
6 голосов
/ 28 июля 2010

Я определяю функцию func1 ();Я хочу, чтобы он принял несколько параметров, то есть

var func1(aaa, bbb){
//do something, anything!
};

, затем я хочу вызвать его позже в документе примерно так:

$('#some_id').click(func1($this));

, но он не работает.

Я какое-то время возился с этим, но очень странно, что jquery / javascript, по крайней мере, обрабатывают пользовательские функции.Может ли some1 предоставить мне простой фрагмент кода?Thx

Ответы [ 6 ]

6 голосов
/ 28 июля 2010

Если все, что вы хотите передать, это $(this), вам не нужен параметр, так как он будет доступен внутри определенной функции.

$('#some_id').click(func1);

Однако вы не можете добавить такие параметры:

$('#some_id').click(func1(param1, param2));

Тогда для определения функции у вас просто есть

function func1() { }

Если вам нужны параметры, отличные от $ (this), вам нужно будет сделать следующее:

$('#some_id').click(function () {
    func1(aaa, bbb); });
5 голосов
/ 28 июля 2010

Я предполагаю, что вы пытаетесь убедиться, что this по-прежнему ссылается на элемент, получивший событие.

Попробуйте: http://jsfiddle.net/jKM9s/

$('#some_id').click(function() {
    func1.call(this, 'somearg', 'somearg'); 
});

   // now "this" references the element when func1 is called
function func1(aaa, bbb){
    //do something, anything!
};

РЕДАКТИРОВАТЬ:

Если все, что вам нужно, это ссылка на элемент, на который вы нажали, то см. первое решение *1016* phoffer's.

1 голос
/ 28 июля 2010

Вот краткий пример:

Убедитесь, что вы определили свою функцию с помощью function.Затем, когда вы хотите вызвать его из jQuery, , вы должны использовать встроенную функцию в click().

<div>Click Me!</div>
<div>Pick this one!</div>
<script type="text/javascript">   
function func1(aaa, bbb) 
{ 
    alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb); 
};          
$('div').click(function ()
{
    func1(this, "that's ok.");
});
</script>        
1 голос
/ 28 июля 2010

должно быть

function func1(aaa, bbb)  { ... }
0 голосов
/ 28 июля 2010

В Javascript вы не можете назначить функцию и передавать аргументы одновременно.Используйте анонимную функцию ...

$('#some_id').click(function() {
  var arg1 = $(this);
  var arg2 = 'whatever';

  return func1(arg1, arg2);
});

Если вам нужен только один параметр this, присвойте ссылку на функцию ...

$('#some_id').click(func1);
0 голосов
/ 28 июля 2010

Вы не можете сделать это как $('#some_id').click(func1($this)); из-за определения .click(handler(eventObject)) ... если вы так его называете, $this в func1($this) можно ожидать как eventObject.

для этого вы можете использовать .bind() и event.data.

демо

например ..

function sum(event) {
   alert(event.data.x + event.data.y);
   // `this` here would refer to the element calling this function
   // for example, $(this).attr('id') would return `someID` if called below
}

назовите это

$('#someID').bind('click',{x:4, y:5}, sum);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...