0

我有一个用 javascript 填充的表,通过 ajax 获取数据。我有一个<tr>模板,我克隆并将其中的值设置为通过 ajax 请求检索到的数据。我正在使用 Twitter bootstrap 的popovers,以便用户可以单击一个单元格,该单元格会弹出带有输入/选择等的弹出框,提示用户更改单元格值。当我设置这些输入的值时会出现问题。当我构建每一行时,我在弹出框模板中设置了输入的值.val('xxx'),但是当我记录它/单击单元格并查看弹出框时,什么都没有改变;相反,如果我设置它.attr('value', 'xxx'),它工作得很好..为什么.val('xxx')不工作?

这是它的肉的样子..

行模板:

    ....
    <td>
        <div class="last-name popover-toggle">
            <span class="vlabel">----</span>

            <div class="popout">
                <input type="text" name="last_name" value=""/>
                <div class="popout-button-container">
                    <button type="button" class="btn btn-primary btn-small cancel-field">Cancel</button>
                    <button data-url="{{ url('edit_lead.json') }}" type="button" class="btn btn-primary btn-small save-field">Save</button>
                </div>
            </div>
        </div>
    </td>
    ....

设置输入值:

...
if (data['last_name']) {
    $nRow.find('.last-name input[name=last_name]').val(data['last_name']);//.attr('value', data['last_name']);
    $nRow.find('.last-name .vlabel').text(data['last_name']);
}
registerPopover($nRow.find('.last-name'), 'Last Name');
....

注册弹出框:

function registerPopover(el, title) {
    var options = {
        animation: false,
        content: el.find('.popout').html(),
        html: true,
        trigger: 'manual'
    };
    if (typeof(title) != 'undefined') {
        options['title'] = title;
    }
    el.popover(options);
}
4

1 回答 1

1

不确定您的实际问题是什么,问题对我来说不是很明显,但是attrand之间有区别val。该attr方法设置/更改attribute源中的输入/元素,您可以使用浏览器的检查工具看到它,另一方面,方法设置/更新内存中val的呈现属性,但它不会影响原始属性source/HTML浏览器的源代码。例如,如果你做这样的事情

HTML:

<input type = "text" name="txt" id = "txt" value = "Hello!" />

JS:

$('#txt').val('World!').clone().insertAfter($('#txt'));

检查源代码,然后你会看到有两个input元素,并且都有 value 属性Hello!,但在屏幕上都有world!. 检查这个详细的答案

于 2013-10-01T04:12:47.150 回答