2011-09-29 51 views
1

我一直沒能找到一個答案:的jQuery選擇元素變量

我的HTML(簡體)類似於這樣(有在頁面上幾個不同的控件:文本字段,組合框等。):

... 
<input name="name" onfocus="showHint(this, 'Please enter your name')" onblur="hideHint()" ...> 
... 

一個在javascript函數showHint我做這樣的事情:

function showFormEntryHint(control, text) 
{ 
    localOffset = 30; 
    $('#entry_hint').html(text); 
    var position = $(control).offset(); 
    position.left += $(this).offset() + localOffset; 
    position.top -= 5; 
    $('#entry_hint').position(position); 
    $('#entry_hint').fadeIn(); 
} 

的想法是定位#entry_hint格旁邊爲t他調用該函數的字段。不幸的是,選擇器$(control)似乎不起作用 - 並且它總是返回{left: 0, top: 0}

任何想法,我怎麼能得到這個工作?非常感謝!

+1

我會推薦一個不錯的預先烘焙的工具提示庫。 – thomasfedb

+0

@thomasfedb:那會很好,但我們需要堅持進入該工具提示的內容遠不止文本。它本質上是ajax加載的xml/xslt。 –

+0

只是一個簡單的問題 - 爲什麼沒有輸入字段的類,並定義腳本塊中的事件? :) – Jeff

回答

0

剛剛擺脫了控制,你可以使用$(this)像你這樣做position.left。不知道你想用$(控制)完成什麼。

+0

不知道這將如何工作。我在頁面上有十幾個控件 - 當它調用'showHint'時,調用它的控件作爲參數傳遞。會'$(this)'評估? –

+0

position.left + = $(this).offset()+ localOffset;對於這一行你使用$(this),這應該相當於你想用$(控制)完成的任務,因爲對於控制,你只是首先將它傳遞給「this」... – Evan

+0

是的!顯然,這正是問題所在。我錯過了這個'$(this)'!當我用'position.left + = $(control).width()+ localOffset'替換這行時,' - 一切都很完美。雖然你沒有直接回答我的問題,但你確實指出了問題的根源! –

2

您正在使用jQuery;爲什麼堅持DOM0風格的事件處理程序?

做這樣的:

<!-- simplified --> 
<input id='someInput' /> 

<script type='text/javascript'> 
jQuery(function($) { 

    // this is where we attach the event handlers 
    $('input#someInput') 
    .focus(function() { 
     showFormEntryHint(this, 'Please enter your name.'); 
    }) 
    .blur(function() { 
     hideHint(); 
    }); 
}); 
</script> 

除非那不過,你也可以尋找現成的插件來爲你做首當其衝工作,如果你並不需要太多的定製邏輯。

+0

謝謝。我可能會採用這種方式 - 但是我需要弄清楚爲什麼我的原始解決方案無法正常工作。 –