2013-07-25 3 views
1

У меня есть простой кусок PHP, который генерирует п копии следующего кода:JQuery - как определить, какая ссылка была нажата

<p class="ShowSDB_L2" class="center" onClick="FSD_L2('<?php print dbG;?>','<?php print $sLID;?>')">Click Here to See Data</p> 
<div class="divSDB_L2"> 
</div> 

Он генерируется с использованием PHP, поэтому количество копий неизвестно спереди.

На другой странице у меня есть следующие Javascript (с помощью JQuery)

function FSD_L2(dbG,SlID) 
    { 
     $(".divSDB_L2").load("test15.php?dbG="+dbG+"&SlID="+SlID).css('display','block'); 
    } 

Когда текст выше (Нажмите здесь, чтобы просмотреть данные) щелкают, он должен добавить содержимое test15.php между двумя DIV.

#Test15.php 
<?php 
$dbG = $_GET['dbG']; 
$SlID = $_GET['SlID']; 

print $dbG . " & " . $SlID; 
?> 

Проблема у меня есть, как определить, какая из ссылок была нажата? В настоящее время, если у меня есть три копии и нажмите один, все три копии активируются.

Надеюсь, я сделал это достаточно ясно. Я уверен, что должен быть простой способ, но я совершенно новый для Javascript/jQuery.

+2

просто заголовок, но вы можете назначить щелчок по всем элементам класса «center» .... $ ('. Center'). Click() {// do stuff}); внутри здесь вы можете использовать $ (this), чтобы ссылаться на элемент, который нажал. – Brian

+0

@downvoter, Почему голосуют за этот вопрос? –

ответ

2

Не уверен, что я полностью понимаю, с чем вы сталкиваетесь, но вот как я это сделаю.

<p class="ShowSDB_L2" class="center" data-dbg="<?php print dbG;?>" data-slid="<?php print $sLID;?>">Click Here to See Data</p> 
<div class="divSDB_L2"></div> 

$(document).ready(function() { 
    $(document).on('click', 'p.ShowSDB_L2', function(evt) { 
     var $p = $(evt.currentTarget), 
      dbG = $p.data('dbg'), 
      slid = $p.data('slid'), 
      $div = $p.next(); 

     FSD_L2(dbG, slid, $div); 
    }); 
}); 

function FSD_L2(dbG, SlID, $div) 
{ 
    $div.load("test15.php?dbG="+dbG+"&SlID="+SlID).css('display','block'); 
} 

Обработчик нажмите не зашиты для каждого p тега. Вместо этого с каждым тегом p мы сохраняем необходимый data, то есть dbg & slid.

Обработчик щелчка затем прикрепляется один раз к document ready. jQuery реферат по различным браузерам и передает его обработчикам объект event в качестве его первого параметра. Затем этот объект можно использовать для поиска элемента, на котором произошло событие.См.: http://api.jquery.com/on/

Наконец, мы извлекаем требуемые данные из элемента с щелчком, находим div, который необходимо обновить, а затем вызвать пользовательскую функцию.

+0

Спасибо, мне потребовалось некоторое время, чтобы обдумать это, но я думаю, что понимаю, как это работает. И я протестировал его, и он работает очень хорошо. – IGGt

3

Как сказал Брайан, вы можете просто поместить тот же класс на все свои ссылки и использовать ключевое слово $(this) в jQuery внутри функции щелчка, чтобы узнать, какая ссылка была нажата.

Вот простой пример изменения цвета ссылок на навигационной панели, используя эту технику: http://jsfiddle.net/9E7WW/

HTML:

<a class="nav">Test</a> 
<a class="nav">Test2</a> 
<a class="nav">Test3</a> 
<a class="nav">Test4</a> 

Javascript:

$(document).ready(function(){ 
    $('.nav').click(function(){ 
     // change all to black, then change the one I clicked to red 
     $('.nav').css('color', 'black'); 
     $(this).css('color', 'red'); 
    }); 
}); 
+0

Спасибо, но с этой опцией, как бы передать переменные dbG и SlID в javascript, поскольку они необходимы для вывода? – IGGt

+0

Как и то, что сделал Амит Джордж, вы можете использовать $ (this) .data ('dbg'), чтобы получить строковое значение ваших данных dbg. Если вы не хотите разделить их, вы можете использовать подход ponysmith и поместить все данные в один URL-адрес, а затем в jQuery используйте $ (this) .data ('loadurl'), чтобы получить всю строку. Вот пример: http://jsfiddle.net/Zmaad/ –

1

Вот кросс-браузерный способ найдите элемент (цель), который вызвал событие (e):

function getTarget(e){ 
// non-ie or ie? 
e=e||window.event; 
return (e.target||e.srcElement); 
}; 
1

Добавить полный URL в вашу ссылку (или p в данном случае) с использованием атрибута данных:

<p class="ShowSDB_L2" class="center" data-loadurl="test15.php?dbG=<?php echo $dbG; ?>&SlID=<?php echo $SlID; ?>">Click Here to See Data</p> 

<div class="divSDB_L2"></div> 

Затем сделать все привязки непосредственно в JQuery поэтому у вас есть прямой доступ к ссылке, которая была нажата :

$(document).ready(function() { 
    $('.ShowSDB_L2').on('click', function(e) { 
     e.preventDefault(); 
     $('.divSDB_L2').empty().load($(this).data('loadurl')).show(); 
    }); 
}); 
+0

спасибо, но я получаю сообщение об ошибке «Неисправность: ошибка синтаксиса, нераспознанное выражение:»? – IGGt

+0

У меня нет ошибок при попытке локально. Попробуйте записать значение '$ (this) .data ('loadurl')' на консоль, чтобы убедиться, что у вас нет бродячего персонажа, проходящего через приветствия PHP – ponysmith

+0

. Кажется, я использовал старую копию jQuery .js Как только я обновил это, я прекратил получать ошибку. Но когда у меня есть несколько копий '

Нажмите здесь ...

' и нажмите один, он активирует все из них, а не только тот, который был нажат. – IGGt

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