鼠标悬停时,jquery运行服务器端脚本

时间:2010-01-27 11:50:17

标签: jquery title server-side

我有一个网站,我需要检查所有href-links,如果它们在网站上的自定义词典中。如果它们存在,则应将a-tag中的title属性设置为从服务器获取的文本。我根据这个网站的其他猜测把这个放在一起(例如,没有经过测试):

// 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。安德斯

更新(基于以下答案)

// 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);

  });

}));

4 个答案:

答案 0 :(得分:0)

一些改进:

//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);  
  });

});

这应该有用。

答案 1 :(得分:0)

此代码应该有效,但在我看来,最好在没有javascript的情况下加载标题,因为它可以减少服务器上的负载。除非你想用HTML显示一些描述。为此目的,attr标签不是一种选择。

答案 2 :(得分: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
    });

});

答案 3 :(得分:0)

我或许建议也使用$('a[href]').one('mouseover',function()...而不是$('a[href]').mouseover(function()...,这样每个链接只会使用一次,而不是加班链接鼠标。