Javascript 使用PrototypeJS 1.6访问锚上的HTML数据属性
我在使用PrototypeJS 1.6.0.3访问锚点的属性时遇到问题 当我硬编码course_number变量时,下面的代码可以工作,但是我希望能够从锚中提取它 这是我的锚标签: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
<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'属性是什么?这是你所期望的吗?对不起,我指的是“元素”参数