-1

我有一个包含多个表单实例的页面。除了其他字段外,每个表单都有以下字段:

<input class="span1" type="text" name="abc" id="abc" value="25" placeholder="25"
       onfocus="if (this.value==this.defaultValue) this.value=''; else this.select()"
       onblur="if (!this.value) this.value=this.defaultValue"> 

问题是,当我单击上述字段的任何实例时,焦点都会放在该字段的第一次出现处。this.select不限于该特定元素。如何确保每个字段的 JS 都针对该字段进行操作?

我很确定这是一个基本的 JS 新手问题,但因为我是 JS 新手……;)

4

1 回答 1

-1

在阅读了有关该主题的Quirksmode 文章后,我意识到问题正是那里所描述的 - 该函数被引用而不是复制。从我收集到的信息来看,内联 JS 不可能像我想要的那样在单个页面上处理多个实例。

我的解决方案是从 HTML 标签中提取 JS 并使其成为函数。我使用了一些 jQuery 来做到这一点(因为 jQuery!)。:p

这是HTML:

<input
class="span1 hasDefaultValue"
type="text"
name="abc"
value="25"
placeholder="25">

和 JS:

<script type="text/javascript">
function fieldFocus()
{
    if (this.value==this.defaultValue)
    {
        this.value='';
    }
    else
    {
        this.select();
    }
}
function fieldBlur()
{
    if (!this.value)
    {
        this.value=this.defaultValue;
    }
}

$(document).ready(function() {
    $("input.hasDefaultValue").click(fieldFocus);
    $("input.hasDefaultValue").blur(fieldBlur);
});
</script>

我确信这可以变得更加精简,但我想尽快发布答案。稍后我可能会使用简化的解决方案进行更新。

于 2013-07-10T13:00:35.250 回答