jQuery - как передать $ (this) как объект? - PullRequest
1 голос
/ 16 мая 2010

Я пытаюсь передать объект в функцию, но думаю, что проблема в том, что $ (this) на самом деле не действителен в момент его передачи.

$('textarea[name*=quote]').live('bind',function(){

}).limit('10',$(this).parents('form').children().find('span[name*=qc]') );

Второй параметр может быть либо строкой, либо объектом типа $ ('span # qc'), но я также хочу иметь возможность передавать объект, который ссылается на текущий.

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

Любой ??

Ответы [ 2 ]

1 голос
/ 16 мая 2010

Чтобы связать их всех с доступом к $(this), используйте .each(), например:

$('textarea[name*=quote]').each(function() {
   $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
});

Если вы хотите .live() -подобную функциональность во второй части, вам нужно либо использовать .livequery(), например:

$('textarea[name*=quote]').livequery(function() {
   $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
});

Или, альтернативно, связывайте их, как в первом примере, а также связывайте при загрузке новых элементов, например если вы используете $.ajax(), это будет выглядеть так:

$.ajax({
  url: blah.html
  success: function(data) {
    //do something with data
    $('textarea[name*=quote]', data).each(function() {
     $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
   });
  }
});

Здесь ключ , data, обеспечивает контекст для поиска в , поэтому он выполняется только для элементов, найденных в возвращенных данных. Вы также можете заключить это в функцию, чтобы предотвратить дублирование кода, например:

function bindStuff(context) {
  $('textarea[name*=quote]', context || document).each(function() {
    $(this).limit('10',$(this).closest('form').find('span[name*=qc]'));
  });
}

В document.ready, звоните bindStuff(document), в $.ajax, вы бы позвонили bindStuff(data).

1 голос
/ 16 мая 2010

Вам нужно сделать отдельный вызов для каждого отдельного экземпляра, используя .each, например:

$('textarea#quote').each(function() {
    $(this).live('bind',function(){

    }).limit('10',$(this).parents('form').children().find('span#qc') );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...