1

我有一个问题,一旦我的页面被渲染,焦点没有被设置在动态创建的表/输入的第一个输入元素上。

在 .jsp 我有以下内容:

<script type="text/javascript">
  $(document).ready(function(){

    if(_page != "one") {
      buildTable(shipQty);
      $('#shipItems[0].barCode').focus();
    }

</script>

有一个包含的 .js,其中包含 buildTable 函数

function buildTable(shipQty)
{
  var _tbl = $('<table>').attr({
    id : 'barCodeTable',
    border : '1'
  });

  _tbl.append($('<tr>').append($('<td>').text('Box BarCode'),$('<td>').text('INBOUND Tracking Number')));

  for ( var _index = 0; _index < shipQty; _index++)
  {
    var _inputBarCode = $('<input>').attr({
            class : 'form-med',
            type : 'text',
            name : 'shipItems[' + _index + '].barCode',
            id : 'shipItems[' + _index + '].barCode',
            maxlength: '8'
        }).change(_barCodeChange);

    var _shippingTrackingCode = $('<input>').attr({
      class : 'form-med',
      type : 'text',
      name : 'shipItems[' + _index + '].shipCompanyBarCode',
      id : 'shipItems[' + _index + '].shipCompanyBarCode'
    }).change(_trackingNumberChange);

    _tbl.append($('<tr>').append($('<td>').append(_inputBarCode)).append($('<td>').append(_shippingTrackingCode)));

  }

  $('#tableWrap').append(_tbl);
}

我在stackoverflow上查看了几种不同的解决方案hereherehere和其他解决方案,但无济于事。

我不明白这里的问题。

4

1 回答 1

4

它与动态代码无关。问题是您的 jQuery 选择器与您想要的不匹配。您的代码正在寻找属性为零的元素。

您需要转义.,[].

$('#shipItems\\[0\\]\\.barCode').focus();

运行示例:http: //jsfiddle.net/NC4uz/


jQuery 选择器文档

要使用任何元字符(例如!"#$%&'()*+,./:;<=>?@[\]^{|}~ ) as a literal part of a name, it must be escaped with with two backslashes: \\. For example, an element withid="foo.bar"`,可以使用选择器 $("#foo\.bar")。W3C CSS 规范包含关于有效的 CSS 选择器。同样有用的是 Mathias Bynens 关于标识符的 CSS 字符转义序列的博客条目。

于 2013-03-01T14:12:13.740 回答