今天上午没事做,在公司拿着买到的 <<prototype与script.aculo.us终极揭秘>>一书看,无意中发现了一个比较有趣的问题,不知道是不是 prototype.js自己的bug,拿上来让各位鉴定一下。
参照prototype.js的官方的api文档,Form.Element.focus(element) -> HTMLElement,他的意思应该是调用这个focus()方法之后返回的是应该是一个被prototye扩张的 HTMLElement,然后可以拿着返回的对象可以继续进行链式调用。可事实上并非如此。我自己测试了一把。下面的代码给的不全。要测试的话需要自己补全。
<script type="text/javascript">
function test_focus()
{
$("clickme").observe("click",function(){
alert(Object.isString(Form.Element.focus('username')))
Form.Element.focus('username').disable().setValue("hahahaha");
});
}
document.observe("dom:loaded",test_focus)
</script>
<body>
<form id="login">
username : <input type="text" id="username" value="hehehehe"><br>
password : <input type="text" id="password"><br>
<input type="button" value="click me" id="clickme"><br>
</form>
</body>
上面的代码运行到alert()部分的时候,会提示true,也就是说他返回的是一个String,然后会报出一个Form.Element.focus("username").disable is not a function的错误。
查看prototype.js的源代码,我们看到这个方法的定义,他其实就是直接返回了传进去的element,根本就没做扩展,所以所谓的链式编程到这里就不能继续下去了。
Form.Element = {
focus: function(element) {
$(element).focus();
return element;
},
select: function(element) {
$(element).select();
return element;
}
};
我直接把它hack掉之后上面的代码就可以正常运行了
Form.Element = {
focus: function(element) {
$(element).focus();
return $(element);
},
select: function(element) {
$(element).select();
return $(element);
}
};
我不知道这是不是prototype.js的bug,我这样的修改也只能说能测试通过我写的demo,所以拿出来供大家谈论一下。
分享到:
相关推荐
例如,我们可以使用`Form.Element.focus`来自动聚焦某个输入字段,或者使用`Form.Element.serialize`序列化表单数据,这对于自动提交时获取用户输入的数据非常有用。 2. **表单提交**:Prototype的`Form.Methods`...
- **`serialize(formElement[, getHash=false])`**和**`serializeElements(elements[, getHash=false])`**:将表单或一组元素序列化为URL参数字符串。 #### Form.Element模块:更细粒度的表单元素控制 `Form....
24. **Form.Element.serialize**:序列化表单元素的内容,`Form.Element.serialize('text1')`将`text1`的值转化为字符串。 25. **$F**:这是`Form.Element.getValue()`的别名,如`$F('text1')`获取ID为`text1`的...
Prototype.js作为一个成熟的JavaScript库,简化了许多常见的DOM操作、事件处理及AJAX请求,使得开发者能够更加专注于业务逻辑而非底层实现细节。本手册旨在详细介绍Prototype.js中的常用函数及其应用场景,帮助...
`Prototype.js`是一个JavaScript库,它提供了一系列便捷的DOM操作方法和效果函数,极大地简化了JavaScript编程。在本文中,我们将深入探讨`Prototype.js`中的一些基础且常用的函数及其用法。 1. **Element Methods:...
- **`focusFirstElement(formElement)`**: Sets focus on the first interactive element in a form. - **`getElements(formElement)`**: Retrieves all child elements of a form element. - **`getInputs(form...
《prototype.js常用函数详解》 在JavaScript开发中,Prototype.js库提供了一系列强大的工具,使得DOM操作、事件处理以及Ajax交互变得更加便捷。以下是对Prototype.js中一些常见函数的详细解析: 1. **Element....
3. 在`focus`事件中,调用`focus()`方法使`div`获得焦点。 4. 在`blur`事件中,执行相应的操作,例如隐藏`div`。 通过这种方法,我们可以扩展`div`的功能,使其在交互式应用中发挥更大的作用,提供更加丰富的用户...
访问窗体元素 document.all("txt").focus(); document.all("txt").select(); 窗体命令 document.execCommand 窗体COOKIE document.cookie 菜单事件 document.oncontextmenu 创建元素 document....
$(selector).focus(function) 触发或将函数绑定到被选元素的获得焦点事件 $(selector).mouseover(function) 触发或将函数绑定到被选元素的鼠标悬停事件 四. jQuery实例 jQuery hide() 演示简单的 jQuery hide() ...
alert、assign、blur、anchor、anchors、button、checkbox、clearInterval、clearTimeout、close、closed、confirm、constructor、decodeURI、decodeURIComponent、defaultStatus、document、element、elements、...