0

在您将我的问题标记为重复之前,

我已经尝试过与我的问题相关的现有问题提供的解决方案,但不幸的是它们都没有奏效。所以这是我的问题。我有一个看起来像这样的片段:

<input type='text' class='input-mini' name='library_fee' readonly/>

现在有一个通过AJAX执行查询的按钮,它返回一个类似这样的新 html

echo "<input type='text' class='input-mini' name='library_fee' value='". $fee['library_fee'] ."' readonly/>":。然后它将返回一个新的 HTML,其 value 属性包含来自数据库的值。它现在将填满曾经为空的文本框。

注意:我的查询和我的 AJAX 工作得很好,没有任何问题


问题

我有一个脚本,它具有一个功能,每当您单击文本框时,它都会删除只读属性。

$(document).ready(function()
{
    $('input:text').on('click', function()
    {
        if($(this).is('[readonly]'))
        {
            $(this).removeProp('readonly');
        }
    });
});

在通过 AJAX 重新加载页面之前,这一切正常。为什么?

4

3 回答 3

1

使用委托是您所需要的:

$(document).ready(function()
{
    $(this).on('click','input:text', function()
    {
        if($(this).is('[readonly]'))
        {
            $(this).removeProp('readonly');
        }
    });
});

这里$(this)指的是文档,作为委托目标,您应该使用最接近的公共静态容器(如果有)。

于 2013-07-24T10:05:12.687 回答
1

由于input是动态添加的,因此您需要使用事件委托来注册事件处理程序,例如:

// New way (jQuery 1.7+) - .on(events, selector, handler)
$(document).on('click', ':text', function(event) {
    ....
});
于 2013-07-24T10:06:18.133 回答
1

如果我理解正确,您正在用通过 AJAX 从服务器加载的另一个输入字段替换输入字段。

请理解,jQuery 事件绑定仅在 $(document).ready() 被触发时发生一次。除非再次触发此事件,否则当您替换输入时,该事件不会绑定到新输入。

从 AJAX 响应加载后手动绑定它可能是这里的方法。

于 2013-07-24T10:06:32.207 回答