带有多个换行符的jQuery自动完成

时间:2018-07-04 00:54:58

标签: jquery jquery-ui-autocomplete

当选择一个项目时,我正在使用jQuery自动完成功能来填写多个字段。除非任何数据中都有分页符,否则一切都会正常进行。因此,这是jquery示例代码:

var equipment = [
{ id: "3",
  label: "Custom Name 3",
  text: "Some text without line break"
},
{ id: "4",
  label: "Custom 4",
  text: "Some text WITH
line break"
}
];

$( "#equipment" ).autocomplete({
      minLength: 0,
      source: equipment,
      focus: function( event, ui ) {
        $( "#equipment" ).val( ui.item.label );
        return false;
      },
      select: function( event, ui ) {
        $( "#equipment" ).val( ui.item.label );
        $( "#id" ).val( ui.item.id );
        $( "#text" ).html( ui.item.text ).text();
        return false;
      }
})

还有html:

<input id="equipment" name="name">
<textarea id="text" name="text" cols="45" rows="5"></textarea>

由于“文本”中的换行符,我在该行中收到“未捕获的SyntaxError:无效或意外的令牌”。我尝试使用jQuery.data获得相同的结果。

如何在不消除所有换行符的情况下解决此错误?

2 个答案:

答案 0 :(得分:1)

您可以查看此fiddle。如果将换行符替换为'\ n',则可以使用。

在从数据中形成Javascript对象(equipment)之前,需要避免数据中的换行符。

答案 1 :(得分:1)

要换行,您需要在文本中添加\n

text: "Some text without\nline break"

代替

text: "Some text without line break"

尝试一下:|

var equipment = [
{ id: "3",
  label: "Custom Name 3",
  text: "Some text without\nline break"
},
{ id: "4",
  label: "Custom 4",
  text: "Some text WITH\nline break"
}
];

$( "#equipment" ).autocomplete({
  minLength: 0,
  source: equipment,
  focus: function(event, ui) {
    $( "#equipment" ).val( ui.item.label );
    return false;
  },
  select: function(event, ui) {
    $("#equipment").val( ui.item.label );
    $("#id").val( ui.item.id );
    $("#text").html( ui.item.text ).text();
    return false;
  }
})
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<input id="equipment" name="name">
<textarea id="text" name="text" cols="45" rows="5"></textarea>