gpt4 book ai didi

javascript - jquery-queryBuilder init 规则与最后提交的搜索

转载 作者:行者123 更新时间:2023-11-30 19:14:23 24 4
gpt4 key购买 nike

我有一个集成了插件 querybuilder.js.org

的表单

我的 js 是:

来自:scripts.js

$(document).ready(function(e) {

// INIT PLUGIN

$('#queryBuilder').queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: [{
id: 'description',
label: 'Description',
type: 'string'
}]
});

// RESTORE RULES FROM LAST SEARCH

$('#queryBuilder').queryBuilder('setRules', decodeURIComponent($("#rules").val()) );

// ON SUBMIT, EDIT THE FORM AND APPEND SQL, PARAMS to USE IN SEARCH FROM DATABASE, AND APPEND RULES TO RESTORE IT TO NEXT LOAD OF THE PAGE

$("#btn-submit").on("click", function(e) {

e.preventDefault();
var form = $("#form");
var rules = $('#queryBuilder').queryBuilder('getRules');
var query = $('#queryBuilder').queryBuilder('getSQL', 'question_mark');

// FOR RESTORE INITIAL VALUES ON RELOAD PAGE
form.append('<input type="hidden" name="rules" value="' + encodeURIComponent(JSON.stringify(rules, null, 2)) + '">');

form.append('<input type="hidden" name="sql" value="' + query.sql + '">');

form.append('<input type="hidden" name="params" value="' + encodeURIComponent(JSON.stringify(query.params, null, 2)) + '">');

form.submit();

});

});

我在 index.php 中的一段代码是:

<?php

if ( isset($_POST) ) {

$rules = isset($_POST['rules']) ? $_POST['rules'] : "";

}

?>

<form name="form" id="form" role="form" method="post" action="">
<div id="queryBuilder"></div>

<!--used only to restore rules in jquery-querybuilder-->
<input type="hidden" id="rules" value="<?php echo $rules; ?>">


<button type="button" id="btn-submit" class="btn btn-success">Search</button>
</form>

问题是规则没有按预期恢复。

如果我在文档准备就绪时插入警告:

alert(decodeURIComponent($("#rules").val()));

我得到了正确的规则:

{
"condition": "AND",
"rules": [
{
"id": "description",
"field": "description",
"type": "string",
"input": "text",
"operator": "equal",
"value": "test value"
}
],
"valid": true
}

看起来这个 $('#queryBuilder').queryBuilder('setRules', decodeURIComponent($("#rules").val()) ); 不是一个有效的初始化方法插件。

如果我尝试以这种方式硬编码规则:

var rules_basic = {
"condition": "AND",
"rules": [
{
"id": "description",
"field": "description",
"type": "string",
"input": "text",
"operator": "equal",
"value": "test value"
}
],
"valid": true
};

$('#queryBuilder').queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: [{
id: 'description',
label: 'Description',
type: 'string'
}],
rules: rules_basic
});

然后一切正常!

如何强制从动态隐藏输入字段中获取初始化规则?我的 script.js 与 HTML 是分开的,所以我不能(也不想)强制使用 PHP 编写初始规则,例如:

index.php:

.... HTML PART

..... JS PART

$('#queryBuilder').queryBuilder({
plugins: ['bt-tooltip-errors'],
filters: [{
id: 'description',
label: 'Description',
type: 'string'
}],
rules: <?php echo $rules; ?> // <---------------- HERE
});

最佳答案

可能的原因是你得到了一个带有“.val”函数的字符串值,但是插件需要一个JSON对象来设置规则,请尝试在script.js中使用这段代码:

var customRules = decodeURIComponent($("#rules").val());
$('#queryBuilder').queryBuilder('setRules', JSON.parse(customRules) );

而不是这个:

$('#queryBuilder').queryBuilder('setRules', decodeURIComponent($("#rules").val()) );

关于javascript - jquery-queryBuilder init 规则与最后提交的搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58163429/

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