上下文 我在一个学生的工作中用Web应用程序转录论文报告。它很旧,我们很遗憾无法更改源代码,也无法直接运行数据库查询。
只有在您提交整个表单后才会检查是否存在唯一ID,除非已完全填写,否则您无法提交。毋庸置疑,这是一个巨大的浪费时间,因为你经常转录整个事情只是为了意识到它是重复的。
目的: 我在下面的用户脚本中启动搜索,搜索唯一ID输入的onblur(noReferenceDeclarant),检查是否有任何匹配(行)并相应地返回。用Greasemonkey运行。搜索表单位于同一域中的另一个页面中。搜索表单不带任何URL参数。
这可以不使用iframe(也许是AJAX)来完成 这是我自己的生产力和工具的工具。同时学习JS。因为我还是一个非常初学者,所以欢迎任何使代码更清晰的提示。
//Adding function to input's blur event
$(document).on ("blur", "#noReferenceDeclarant", isRefNumberExists);
//Vars
var noReferenceDeclarant = '';
var loadCode = 0;
var $searchForm;
//Fonctions
function isRefNumberExists ()
{
noReferenceDeclarant = $('#noReferenceDeclarant').val();
loadCode = 0;
//Make sure there's data in the input before proceeding
if (noReferenceDeclarant)
{
//Build search iframe
$searchForm = $('<iframe />', {
name: 'searchWindow',
src: 'rechercherGriIntranet.do?methode=presenterRechercher',
id: 'searchWindow',
width: 0,
height: 0
}).appendTo('body');
$searchForm.load(searchRefNumber);
}
}
function searchRefNumber()
{
var isExists = false;
//Check which "load" it is to avoid submit loops
if (loadCode === 0)
{
loadCode = 1;
//Filling search form with search term
$(this.contentDocument).find('#noReference').val(noReferenceDeclarant);
//Set search form preferences
$(this.contentDocument).find('#typeRapportAss').prop('checked', false);
$(this.contentDocument).find('#typeRapportAS').prop('checked', false);
$(this.contentDocument).find('#typeRapportSI').prop('checked', true);
//Submit the form
$(this.contentDocument).find('form:first').submit();
}
else if (loadCode === 1)
{
loadCode = 2;
//See if there are any tr in the result table. If there are no results, there a thead but no tr.
var foundReports = $(this.contentDocument).find('.resultatRecherche tr').length;
if (foundReports > 0)
{
if (confirm('A report matching this ID already exists. Do you want to display it?'))
{
//Modal window loading the report in an iframe. Not done yet but that's fairly straightforward.
}
else
{
//Close and return to the form.
}
}
}
//Reset variables/clean ressources
delete $searchForm;
$('#dateRedactionRapport').focus();
}
答案 0 :(得分:1)
总的来说,我看到了远远更糟糕的代码。
Ajax 可以做到这一点,但是你只需要将AJAX响应放入DOM(最有可能是iframe)。
在这种情况下,我会保留你的方法。我认为这是sanest.j
如果没有完整的上下文,可能有一种方法来清理loadCode - 但你拥有的是相同的并且有效。很多人都称之为semaphore
,但这只是一个术语问题。
我唯一真正清理的是建议不要经常调用jQuery对象..
// Many folks recommend that jQuery variables be named $<something>
var $doc = $(this.contentDocument);
doc.find('#typeRapportAss').prop('checked', false);
$doc.find('#typeRapportAS').prop('checked', false);
$doc.find('#typeRapportSI').prop('checked', true);
如果你想使用jQuery数据结构,你可以创建一个如下所示的'config'对象:
var formValues = {
typeRapportAs: false,
typeRapportAS: false,
typeRapportSI: true
};
然后迭代到(使用for ... in
.hasOwnProperty
)。
这个项目不需要,你正在做的很好,但它可能是一个学习练习。