jQuery: как включить атрибуты по клику во время .ready ()? - PullRequest
1 голос
/ 06 февраля 2010

Я пытаюсь конвертировать все мои старые javascripts в jquery, но я немного запутался, как я могу конвертировать мое событие click с помощью attr Старый javascript выглядит примерно так:

function MyFunction(string1, string2){
    doSomething(string1);
    doSomethingElse(string2);
}

А потом я звоню с

<a href="javascript:MyFunction('string 1','string 2');">CLICK HERE</a>

Могу ли я сделать это с помощью jquery click ()? Или как я могу отправить две строки с событием в jquery? Мне нужно определить две строки в ссылке, как я делаю это сейчас, потому что строки будут различаться.

Редактировать: я удалил свой jquery-code-try, поскольку он только запутал :)

Ответы [ 5 ]

1 голос
/ 06 февраля 2010

Если ответ Наима не достаточно хорош:

$('#myLink').click(function() {
    MyFunction('string 1', 'string 2');
});

Хотя я хотел бы сказать, что он выполняет то же самое, не вызывая MyFunction.

EDIT:

После прочтения ваших комментариев я думаю, что это, возможно, больше того, что вы ищете:

$('.myLink').click(function(){
    var $this = $(this);
    MyFunction($this.attr('alt'), $this.attr('title'));
});

Это будет искать все элементы с классом "myLink". При щелчке любого из элементов MyFunction () будет вызываться с атрибутом «alt» элемента в качестве первого параметра и атрибутом «title» элемента в качестве второго элемента.

Конечно, вы можете вызвать MyFunction () с любым атрибутом элемента, который вам нужен, изменив параметр, указанный в $ this.attr ().

1 голос
/ 06 февраля 2010
$('#myLink').click(function() {
    doSomething('string 1');
    doSomethingElse('string 2');
});

Это достаточно хорошо для вас?

0 голосов
/ 07 февраля 2010

Спасибо всем за вашу помощь. Я закончил тем, что использовал решение КБ.

<a href="#" class="myLink" title="string1" rel="string2">click me</a>

И

$('.myLink').click(function(){
   var $this = $(this);
   alert('Output: ' + $this.attr('title') + " and " + $this.attr('rel'));
});
0 голосов
/ 06 февраля 2010

Существует необязательный объект данных, который доступен через свойство event.data объекта event, передаваемого обработчикам событий ( Я выложил код, чтобы он подходил без необходимости прокрутки )

$('#myLink').bind("click", 
                  {string1:"string1", string2:"string2"}, 
                  function(event) {

                      doSomething(event.data.string1);
                      doSomethingElse(event.data.string2); 
});

<div id="myLink">CLICK HERE</div>

Я не совсем уверен, действительно ли это решает основную проблему. Будут ли у каждого элемента <a> разные значения string1 и string2? Если это так, вы можете подумать о том, чтобы поместить их в $.cache, используя функцию jQuery $.data(), или, возможно, сохранить их в объекте (что, я думаю, похоже на то, что вы получаете с кешем) .

0 голосов
/ 06 февраля 2010

Решение Naeem хорошее, и трудно определить условия этой ссылки. Это динамически создано? Если это так, вы можете установить атрибуты, такие как

<div id="myLink" a="string1" b="string2">CLICK HERE</div>

, а затем

$('#myLink').click(function() {
    doSomething( $(this).attr('a') );
    doSomethingElse( $(this).attr('b') );
});
...