Javascript 使用PrototypeJS 1.6访问锚上的HTML数据属性

Javascript 使用PrototypeJS 1.6访问锚上的HTML数据属性,javascript,html,ajax,prototypejs,Javascript,Html,Ajax,Prototypejs,我在使用PrototypeJS 1.6.0.3访问锚点的属性时遇到问题 当我硬编码course_number变量时,下面的代码可以工作,但是我希望能够从锚中提取它 这是我的锚标签: <a class="course_number_info_link" data-course-number="{$foo}" href="#">{$foo}</a> 这是我的getCourseInfo方法,但是course\u编号无法通过。如何访问数据属性 getCourseInfo

我在使用PrototypeJS 1.6.0.3访问锚点的属性时遇到问题

当我硬编码course_number变量时,下面的代码可以工作,但是我希望能够从锚中提取它

这是我的锚标签:

<a class="course_number_info_link" data-course-number="{$foo}" href="#">{$foo}</a>
这是我的
getCourseInfo
方法,但是
course\u编号
无法通过。如何访问数据属性

    getCourseInfo: function(element) {

       var course_number = element.readAttribute('data-course-number');

       console.log(course_number);

       new Ajax.Updater('result-' + course_number, '/ajax/get_course_info.php', {
                parameters: { course_no: course_number },
                onSuccess: function(response) {
                    console.log(response);
                }
       });

    }    

设置观察器的方式就是它失败的原因——您正在向观察器传递一个完整的函数,而不是函数引用

如果这是在对象内部运行的,则
这是对象而不是元素

$$('.course_number_info_link').invoke('observe', 'click', this.getCourseInfo(this));
应该是

$$('.course_number_info_link').invoke('observe', 'click', this.getCourseInfo);
传递到
getCourseInfo()
的参数将是一个事件对象,而不是元素对象-
应该是元素对象,或者您也可以像这样获取元素

getCourseInfo: function(event) {

   var element = event.findElement();
   var course_number = element.readAttribute('data-course-number');
//snip....

设置观察器的方式就是它失败的原因——您正在向观察器传递一个完整的函数,而不是函数引用

如果这是在对象内部运行的,则
这是对象而不是元素

$$('.course_number_info_link').invoke('observe', 'click', this.getCourseInfo(this));
应该是

$$('.course_number_info_link').invoke('observe', 'click', this.getCourseInfo);
传递到
getCourseInfo()
的参数将是一个事件对象,而不是元素对象-
应该是元素对象,或者您也可以像这样获取元素

getCourseInfo: function(event) {

   var element = event.findElement();
   var course_number = element.readAttribute('data-course-number');
//snip....

虽然Geek Num 88提供的答案指出了观测者的错误设置,但它并没有完全解释如何正确访问观察者。 当然,最简单的方法是prototype的
元素。readAttribute()
,但您也可以使用在所有现代浏览器上都可用的本机。因此,不是:

var course_number = element.readAttribute('data-course-number');
您可以使用:

var course_number = element.dataset.courseNumber;
如果您需要旧浏览器的回退,您可以实现如下内容:

Element.addMethods({
    addDataset: function(e){
        if(!(e = $(e))){
            return;
        }
        if(!e.dataset){
            e.dataset = {};
            $A(e.attributes).each(function(a){
                if(a.name.match(/^data-/)){
                    e.dataset[a.name.substr(5).camelize()] = a.value;
                }
            });
        }
        return e;
    }
});

虽然Geek Num 88提供的答案指出了观测者的错误设置,但它并没有完全解释如何正确访问观察者。 当然,最简单的方法是prototype的
元素。readAttribute()
,但您也可以使用在所有现代浏览器上都可用的本机。因此,不是:

var course_number = element.readAttribute('data-course-number');
您可以使用:

var course_number = element.dataset.courseNumber;
如果您需要旧浏览器的回退,您可以实现如下内容:

Element.addMethods({
    addDataset: function(e){
        if(!(e = $(e))){
            return;
        }
        if(!e.dataset){
            e.dataset = {};
            $A(e.attributes).each(function(a){
                if(a.name.match(/^data-/)){
                    e.dataset[a.name.substr(5).camelize()] = a.value;
                }
            });
        }
        return e;
    }
});

调用“getCourseInfo”时,“element”属性是什么?这是您期望的吗?对不起,我指的是'element'参数调用'getCourseInfo'时'element'属性是什么?这是你所期望的吗?对不起,我指的是“元素”参数