2010-01-27 46 views
0

我有一個網站,我需要檢查所有HREF鏈接,如果他們在網站上的自定義詞典。如果它們存在,則應將a-tag中的title屬性設置爲從服務器獲取的文本。我把這個基於來自這個網站的其他wuestion(例如,未測試):jQuery的運行服務器端腳本時,鼠標懸停

// How to only activate "a href" links? 
jQuery('a').mouseover(function() { 

    // should be what is between <a href="">this text</a>. Is this correct? 
    var dictionaryWord = jQuery(this).text(); 

    // do a server site call to get description for the word given in the var above 
    jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord }, 

    function(data){ 
     // set title tag for the a-tag actual a-tag 
     // will "this" refer to the a-tag with mouseover? 
     jQuery(this).attr("title", data); 

    }); 

}); 

上面可能有錯誤。我剛剛在StackOverflow上的這個不同的答案中創建了它。有沒有更好的方式來獲得服務器的響應比上述?

如果一切正常,我只需要一個很好的方式來顯示鼠標懸停在標題標籤。我已經看到了一些軟件包,所以應該很容易。

BR。安德斯

UPDATE(基於下面的答案)

// all "a href" do this for the first mouseover "one.()" 
jQuery('a[href]').one('mouseover',(function() { 


    // get a reference to the clicked + get dictionary word 
    var anchor = jQuery(this), 
     dictionaryWord = anchor.text(); 

    // do a server site call to get description for the word given in the var above 
    jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord }, 

    function(data){ 
     // set title tag for the a-tag actual a-tag 
     // will "this" refer to the a-tag with mouseover? 
     anchor.attr("title", data); 

    }); 

})); 

回答

0

一些imporvements:

//Match only a with the href attribute 
jQuery('a[href]').mouseover(function() { 

    var dictionaryWord = jQuery(this).text(), 
    //cache the context and use it in the ajax function 
    el=jQuery(this); 

    jQuery.get("/getDescriptionFromDictionaryWord.aspx", { word: dictionaryWord }, 

    function(data){ 
     //You can't use the $(this) use the cached context 
     el.attr("title", data); 
    }); 

}); 

這應該工作。

0

此代碼應工作,但是在我看來,這是更好地加載標題沒有JavaScript的,因爲它減輕服務器的負載。除非你想用HTML顯示一些描述。爲此,attr標籤不是一個選項。

+0

感謝您的反饋意見。我猜你是對的。我最終可能會使用某種工具提示。 – Tillebeck 2010-01-27 13:58:30

0

你寫了什麼作品,只要getDescriptionFromDictionaryWord.aspx看起來像:

Response.Clear(); 
Response.Write("description for word"); 
Response.End(); 

即整個反應是要顯示的值。

一個更好的辦法做到這一點是創建類型爲「Web服務(ASMX)」的新文件,稱它爲「Dictionary.asmx」。在創建的CS/VB文件,確保取消註釋註釋掉ScriptService屬性,然後添加類似如下的方法:

[WebMethod] 
public string GetDescription(string word) { 
    // internal logic for dictionary lookup 
    return description; 
} 

這樣的話,你可以提交一個請求是這樣的:

$('a[href]').mouseover(function() { 

    // the above selector finds all anchors with 'href' attribute 

    var anchor = $(this); // get a reference to the clicked item 
    var dictionaryWord = anchor.text(); 

    jQuery.get("/Dictionary.asmx/GetDescription", { word: dictionaryWord }, function(data){ 
     anchor.attr("title", data.d); // .NET will wrap the response in a 'd' property 
    }); 

}); 
+0

這是不退還的文本,但一個XSLT萬客隆了一把umbraco CMS模擬beeing一個aspx頁面的真實頁。但否則,我會與您的建議去;-) – Tillebeck 2010-01-27 14:23:52

0

我或許還建議使用$('a[href]').one('mouseover',function()...代替$('a[href]').mouseover(function()...只是所以它只每鏈接,它一次,而不是加班你將鼠標懸停在鏈接。

+0

謝謝。我不知道那個。這是一個名單:-) – Tillebeck 2010-01-27 13:48:16