1

我正在尝试在文本框上实现一个简单的水印,当文本框获得焦点时它会消失。我发现这个 jQuery 插件看起来很好用:

http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/

水印的工作方式与以下代码所宣传的一样:

<script type="text/javascript" src="/includes/_jQuery/_Library/jquery-1.3.1.min.js"></script>
<script type="text/javascript" src="/includes/_jQuery/_plugs/_hint/jquery.hint.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("input[title!=]").hint();
    });
</script>

<table>
    <tr>
        <td><input type="text" title="Blah" /></td>
    </tr>
</table>

但是,当向表格的单击事件添加警报时,我发现当您单击文本框有文本的部分时,该事件不会冒泡。但是,当您单击没有文本的文本框部分时,它会很好地冒泡。这是我用来创建警报的 jQuery 代码:

        $("table").click(function() {
            alert("blah");
        });

有谁知道为什么单击文本框的一部分时事件没有冒泡,而另一个则没有?

4

1 回答 1

1

有没有人知道为什么单击文本框的一部分时事件没有冒泡

这似乎是影响文本输入和文本区域的 Firefox 特定错误。您只需几行代码即可重现它,它与 jQuery 无关或与插件无关:

<form onclick="alert('hello')">
    <input type="text" value="hello!" onfocus="this.value=''">
</form>

(虽然我认为该插件确实存在一些相当严重的问题。它忘记在局部变量上使用“var”,让它们泄漏到全局范围。这使得同一页面上的多个“.blur”元素失败。加上“空”值仍将作为标题字符串提交到表单,并且您无法区分用户键入的与标题字符串匹配的“真实”值。)

只有在焦点事件中更改输入值时,该事件才会冒泡。推测性地,我的猜测是 Firefox 在内部识别 click() 发生在输入内的文本上,并期望将该事件冒泡到每个文本的祖先。但是当直接父级上的单击事件导致 onfocus 触发时,该函数正在从其父级中删除文本。现在没有发生 click 事件,没有父链可以冒泡。

于 2009-03-10T20:16:58.530 回答