2013-11-07 5 views
0

Я пытаюсь передать пользовательский атрибут скрипту. Если я передаю его таким образом:Передача параметра в js

$('a.load-local-image').cluetip({ 
local:true, 
leftOffset: $("#par-1").attr("leftpos") 
); 

он отлично работает. Однако мне нужно передать атрибут текущего элемента, а не только пар-1. Если я попробую так:

$('a.load-local-image').cluetip({ 
local:true, 
leftOffset: $(this).attr("leftpos") 
); 

Функция видит, что параметр не передается вообще. Если я пытаюсь это так:

$('a.load-local-image').cluetip({ 
local:true, 
leftOffset: function() {return $(this).attr("leftpos");} 
); 

он передает буквенную строку "функции() {вернуть $ (это) .attr (" leftpos ");}" в качестве параметра.

Я знаю, что "$ (это) .attr (" leftpos)»возвращает правильное значение, потому что когда я добавить этот хак непосредственно над вызовом функции:

$("a.load-local-image").mouseover(function(){ 
    alert("leftpos=" + $(this).attr("leftpos")); 
}); 

отображает "leftpos = 220".

Вот разметка:..!

<div id="par-1"> 
    <a id="load-local" class="load-local-image featurelink" title="" href="" rel="#whatever" leftpos="220" toppos="48"> 
    <img src="images/image.jpg" alt="" class="featureimg"></a> 

Я просто пытаюсь передать значение leftpos текущего элемента к функции Может кто-то пожалуйста, помогите мне разобраться в этом спасибо

+1

На 'img' нет атрибута' leftpos'. Это на 'a'. –

ответ

0

Нет атрибута leftpos на img, атрибут leftpos находится на a. Это может быть частью вашей проблемы.

+0

Пробовал это, уже. Не работает. – user2818251

+0

Я не уверен, что пример неверен, но Том прав, пытаясь получить атрибут leftpos' из тега img, будет возвращен undefined, поскольку атрибут отсутствует в теге img. Так как он находится в теге привязки, замените '$ (this) .find (" img "). Attr (" leftpos ")' с '$ (this) .attr (" leftpos ")' –

+0

Хорошо, еще раз: он возвращает правильное значение. Я показываю его.Я попытался поместить атрибут leftpos на каждый элемент div (включая div) с теми же результатами. Тем не менее, я беру это в примере, поскольку все, кажется, зациклились на этом. Это не проблема. Проблема в том, что параметр функции не будет передавать возвращаемое значение значением $ (this). – user2818251

0

К сожалению, объект this не может быть изменен в параметре. Объект this останется объектом this из вызывающего контекста.

$('#foo').click(function() { 

    // right here the "this" object refers to $('#foo') 

    $('a.load-local-image').cluetip({ 
     local: true, 
     leftOffset: $(this).find("img").attr("leftpos") 
     //   ^- refers to $('#foo') also (same context) 
    }); 
}); 

, когда вы сделали это:

$("a.load-local-image").mouseover(function(){ 
    alert("leftpos=" + $(this).find("img").attr("leftpos")); 
    //     ^- refers to the $('a.load-local-image') that the event was run on 
}); 

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

EDIT:

Чтобы достичь того, чего вы пытаетесь достичь с this объекта, который вы могли бы просто сделать это:

$('a.load-local-image').cluetip({ 
    local: true, 
    leftOffset: $('a.load-local-image').attr("leftpos") 
}); 

Or: 

$("a.load-local-image").mouseover(function(){ 
    $(this).cluetip({ 
     local: true, 
     leftOffset: $(this).attr("leftpos") 
    }); 
}); 

EDIT # 2:

Причина cluetip не будет открытым в первый раз, потому что вам нужно это сделать.

// create the cluetip instance: 

$("a.load-local-image").cluetip(); 

// now that the cluetip is created you can call it like this: 

$("a.load-local-image").mouseover(function(){ 
    $(this).cluetip({ 
     local: true, 
     leftOffset: $(this).attr("leftpos") 
    }); 
}); 
+0

Это имеет смысл. Я подозревал, что это было время. Я попытался вставить вызов функции внутри функции mouseover, но он все равно делает то же самое. Как передать значение этого атрибута функции? – user2818251

+0

Чтобы получить атрибут от элемента, за которым вы запускаете эту функцию, вам придется просто повторно использовать селектор вместо использования этого объекта. См. Править. – Michael

+0

Спасибо, Майкл! Второй пример работает (первый всегда возвращает первое событие), за исключением одной странной вещи: cluetip не выполняется при первом наведении мыши. Мне нужно дважды прокрутить мышь по изображению, чтобы заставить его выполнить. Любая идея, почему это было бы? – user2818251

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