我为表单输入字段进行了自动填充,允许用户将标记添加到它们的列表中。如果用户选择任何建议,我希望页面使用将新标记添加到已经存在但没有重新加载页面的标记部分。
我希望在3种情况下实现这一点:
我已经能够使场景1完美无瑕地工作。但是,方案1和2使页面重新加载,甚至仍然不会将标记添加到列表中。
情景1和2都由相同的函数调用:
$j("#addTag").autocomplete({
serviceUrl:'/ac',
onSelect: function(val, data){
addTag(data);
}
});
以下是addTag()的代码:
function addTag(tag){
var url = '/addTag/' + tag;
//Call the server to add the tag/
$j.ajax({
async: true,
type: 'GET',
url: url,
success:function(data){
//Add the tag to the displayed list of already added tags
reloadTagBox(data);
},
dataType: "json"
});
//Hide the messages that have been displayed to the user
hideMessageBox();
}
场景1代码:
function addTagByLookup(e, tag){
if(e && e.keyCode == 13)
{
/*This stops the page from reloading (when the page thinks
the form is submitted I assume).
*/
e.preventDefault();
//If a message is currently being displayed to the user, hide it
if ($j("#messageBox").is(":visible") && $j("#okayButton").is(":visible")){
hideMessageBox();
}
else{
//Give a message to the user that their tag is being loaded
showMessageBox("Adding the tag <strong>"+tag+"</strong> to your station...",'load');
//Check if the tag is valid
setTimeout(function(){
var url = '/checkTag/' + tag;
var isTagValid = checkTag(tag);
//If the tag is not vaid, tell the user.
if (isTagValid == false){
var message = "<strong>"+tag+"</strong>"+
" was not recognized as a valid tag or artist. Try something else.";
//Prompt the user for a different tag
showMessageBox(message, 'okay');
}
//If the tag is valid
else{
addTag(tag);
}
}, 1000);
}
}
}
我知道我在方案1中使用e.preventDefault功能进行正常表单提交,但我似乎无法使其与其他方案一起工作,我甚至不确定这是真正的问题。
我使用pylons作为MVC并使用this tutorial进行自动完成。
答案 0 :(得分:0)
所以,如果有人想知道,我的问题是一个简单的解决方案,我应该从来没有过。
我的输入标记嵌入在每次激活输入标记时提交的表单中。
我在方案1中通过阻止用户按Enter键时发生默认事件来解决此问题。但由于我无法在jQuery事件.autocomplete()中访问此事件,因此我无法阻止它。