2010-08-29 2 views
1
$('.more').click(function test(id) { 
      $('#MoreFriendInfo'+id).toggle(); 
    }); 

Я сделал это, function test (id), теперь как мне сделать ссылку прямо в html/php, чтобы захватить идентификатор? Я попытался это, но он не работает:jquery: function in "onclick"

<a class='more' href="javascript:void(0);" onclick='test(<?php echo $showInfo["bID"]; ?>)'>mer</a> 

В поджигатель я получаю «тест разве определен»

ответ

1

Во всех из них, мы удалимonclickиз разметки:

Вы можете использовать атрибут данных, например:

<a class='more' href='#' data-id='<?php echo $showInfo["bID"]; ?>'>mer</a> 

Затем возьмите его в .click() обработчик, например:

$('.more').click(function() { 
    $('#MoreFriendInfo'+$(this).attr('data-id')).toggle(); 
}); 

В качестве альтернативы, если он находится в другом контейнере забыть идентификаторы и find it relatively, например, если разметка была такой:

<div class="container"> 
    <a class='more' href="#">mer</a> 
    <div class="moreFriendInfo">Content</div> 
</div> 

Вы могли бы сделать это нравится:

$('.more').click(function() { 
    $(this).closest('.container').find('.moreFriendInfo').toggle(); 
}); 

(в этом случае вы можете использовать .siblings(), но это означало бы более общий ар proach)

+0

Спасибо, ожидая ответа на вопрос, у меня возник вопрос. Можете ли вы указать любое имя attr, которое вы хотите? (к вашему первому решению) – Karem

+0

@Karem - они должны начинаться с префикса 'data-', кроме этого да, независимо от того, что вы хотите, они не навредят в HTML4, и они фактически являются частью спецификации в HTML5. –

1

Способ, которым вы определяете его, test(id) - внутренняя функция, которая находится только в пределах .click().

Обратите внимание, что при использовании .click() вы эффективно определяете onclick. Вам также не нужно добавлять его в разметку.

Вместо того, чтобы передавать идентификатор, я бы разработал разметку таким образом, чтобы элементы были размещены таким образом, чтобы я мог использовать контекст селектора, чтобы передать начальную точку для селектора.

$('.more').click(function() { $('.moreFriendInfo',this).toggle(); });

+0

Этот подход нашел бы элемент 'class =" moreFriendInfo * 'внутри * якоря, который не выглядит так: –

+0

@Nick, см. То, что я сказал выше кода, вместо того, чтобы передавать идентификатор" , Код также может использовать селектор $ (this) .parent(). ** Нет причин делать полный поиск dom в таком случае. ** –

+0

@rchern - я никогда не говорил поиск по всей DOM :) См. Мой ответ, что-то вроде '$ (this) .siblings()' или '$ (this) .closest ('selector'). find ('selector')' это то, о чем я говорил. –

0

ответ Ник почти совершенна, но я хотел бы использовать «отн» вместо «данных-идентификатор», если данные-идентификатор не является допустимым атрибутом HTML.

+0

Они действительные атрибуты, 'data-anything' зарезервирован для тех атрибутов, которые вы хотите, но никогда не было :) –