使用JavaScript进行网格内联编辑,奇怪的行为

时间:2010-08-05 09:32:20

标签: javascript asp.net jquery ajax inline-editing

我制作了此发票页面。 有一个生成表的转发器。 发票项目描述包含在用div标签封装的td标签中 像这样:

<asp:Repeater ID="Repeater1" runat="server">
           <ItemTemplate> 
            <tr>
             <td class="griditem text">
                 <div class="invoiceDescription" id='<%# "item-" + Eval("ID") %>' value='<%# Eval("ID") %>' onclick="InvoiceItemClicked(this);">
                    <%# Eval("Description") %>
                 </div>
             </td>
             <td class="gridnumb text r">
             <%# String.Format("{0:n}", Eval("Quantity"))%>
             </td>
             <td class="gridnumb text r">
             <%# String.Format("{0:c}", Eval("UnitCost"))%>
             </td>
             <td class="gridnumb text r">
             <%# String.Format("{0:c}", Eval("Total"))%>
             </td>
            </tr>
           </ItemTemplate>
          </asp:Repeater>

如果您看到第一行,我会调用javascript onclick。函数是这样的(使用jQuery):

function InvoiceItemClicked(elm) {
        var textbox = document.createElement('input');
        textbox.setAttribute('type', 'text');
        textbox.value = $(elm).text();
        $(elm).html(textbox);
    }

这是我第一次尝试这样做,并且它在第一次拍摄时起作用。它将行转换为文本框,并将相同的文本设置到文本框中。但问题是当单击生成的文本框(焦点)时,其中的文本消失。

我还要感谢其他任何最佳实践来进行内联编辑。我需要通过webservices等更新项目。

提前致谢。

1 个答案:

答案 0 :(得分:0)

是的,我的坏!

function InvoiceItemClicked(elm) {
        var b = $(elm).hasClass('invoiceDescriptionEditing');
        if(!b)
        {
            var textbox = document.createElement('input');
            textbox.setAttribute('type', 'text');
            textbox.setAttribute('id', 'txt');
            $(textbox).css('width', '550px');
            textbox.value = $(elm).text();
            $(elm).html(textbox);

            $(elm).removeClass('invoiceDescriptionEditable');
            $(elm).addClass('invoiceDescriptionEditing');
        }

    }

这是一个! :)