jQuery,不会改变价值,但会改变其他属性

时间:2010-06-09 05:44:30

标签: jquery

function send_mail( token, loader ) {
 $(".send_mail").bind( "click", function() {
  try{
   var to = $(this).attr('ref');
   var mail_form = $("#mail_form");
   mail_form.find("li:eq(0) input").val("sdsds");
   //mail_form.find("li:eq(0) input").attr("ref", "sdsds");
   //mail_form.find("li:eq(0) input").attr("value", "sdsds");
   $.fancybox(mail_form.html(), { 'autoDimensions' : false, 'width' : 360, 'height' : 200, 'transitionIn' : 'none', 'transitionOut' : 'none', 'scrolling' : 'no', 'showCloseButton' : false });
   return false;
  }catch(err){alert(err);}
 });
}

我的问题是,如果我使用

,上述内容将无效
//mail_form.find("li:eq(0) input").attr("ref", "sdsds");

它将改变参考甚至

//mail_form.find("li:eq(0) input").attr("value", "sdsds");

不起作用......

这里有什么想法吗?

1 个答案:

答案 0 :(得分:1)

jQuery分别使用elem.value = ...elem['value'] = ...设置value属性时使用val()attr。这些方法在value属性方面不会更改实际的HTML。因此,当您从mail_form.html()创建fancybox时,您将获得原始的value属性值,因为它们仍然存在于HTML中。

但是,setAttribute()确实会更改基础HTML value属性。尝试在将值更改为sdsds之后和调用$.fancybox(...)之前添加此内容:

mail_form.find("li:eq(0) input").each( function() {
    this.setAttribute("value",$(this).val());
});