jquery和data-attr在ie8中不起作用

时间:2011-01-02 03:59:05

标签: javascript jquery html

这涉及一个表格,我一次显示5行。 以下代码在firefox中100%完美运行。但在ie8, 只有顶行可以单击以显示editdiv。然而,在Firefox中 我可以点击五行中的任意一行,并按预期加载editdiv。

调用函数的php文件中的行:

echo "<td><a id=\"editjq\" href=\"#\" vid='".$vid."' t1='".$db->hscadd($t1)."' page='".$page."' flag='1')\">  [edit ]  </a></td>";

功能:

$(document).ready(function() {
  $('a#editjq').click(function() {
    var petid = $(this).attr('vid');
    var t1 = $(this).attr('t1');
    var page = $(this).attr('page');
    var flag = $(this).attr('flag');
    $("#petdiv").hide(); 
    $.post("edit_lookup.php", {
      petid : petid,
      t1 : t1,
      page : page
    }, function(data){
     if (data.length>0){ 
       $("#editdiv").html(data); 
     } 
    });
    $(this).unbind(); 
    return false;
  }); 
});

2 个答案:

答案 0 :(得分:7)

您是否生成了五行,每行都有一个具有相同id属性的锚点?如果是这样,那就是你的问题。具有相同id的多个元素在语法上是非法的。而不是id="editjq"使用class="editjq"$('a.editjq').click(...)

答案 1 :(得分:1)

您可以将这段jquery插件代码放在页面脚本中(只需确保它位于jquery.min.js脚本标记之后);

    (function($){            
    var store = {};
    $.fn.extend({  
        collection : function(action, name, value) {
            var $this = this;

            var generate = function(){
                return "COLLECTION" + parseInt((Math.random() * 100000), 16);
            }

            var item_id;
            var methods = {
                put: function(){
                    item_id = $this.attr("id");
                    if(store[item_id]){
                        store[item_id][name] = value;
                    } else {                
                        while(store[item_id] && $(item_id).length > 0){
                            item_id = generate();
                        }                
                        $this.attr("id", item_id);                
                        store[item_id] = {};
                        store[item_id][name] = value;
                    }
                    return $this;
                },

                get: function(){
                    item_id = $this.attr("id");  
                    if(store[item_id] && store[item_id][name]){
                        return store[item_id][name];
                    }
                    else{
                        return null;
                    }
                },

                remove: function(){
                    item_id = $this.attr("id");
                    if(store[item_id]){
                        store[item_id][name] = null;
                    }
                    return $this;
                }
            }

            if(methods[action]){
                return methods[action]();
            } else{
                return alert(store.text.length);
            }
            return $this;
        }
    });     
})(jQuery);

可以按如下方式使用:

  1. 存储数据值

    $(*selector*).collection("put", *DataName*, *DataValue*);
    
  2. 检索数据值

    var referencing_variable = $(*selector*).collection("get", *DataName*);
    
  3. 删除数据值

    $(*selector*).collection("remove", *DataName*);
    
  4. 这是一个跨浏览器的解决方案。虽然我只使用Jquery 1.5.1进行了测试