如何正确取消嵌套 jquery javascript 函数?
How to properly un-nest a jquery javascript function?
我需要取消嵌套以下代码,因为严格 javascript 在 Safari 和 Firefox 中抛出错误(出于某种原因它在 Chrome 中有效)说函数只能在顶层或紧接在另一个函数中并且 $ 不是函数。所以我想我需要拆分函数声明。该代码应该遍历表单中所有必需的元素,并在未使用所有必需字段时阻止提交。
其他注意事项:我正在使用 Google Apps Script 进行开发,这需要严格的 javascript。另请注意,“#submitbutton”实际上是一个常规按钮,它调用处理提交的 google.script。
原码:
<script type="text/javascript">
$('#submitbutton').on('click', function() {
$(this).val("Submitting...");
//check for required fields
var emptyFields = $('[required]').filter(function() {
$(this).removeClass("warning");
if ($(this).val().length === 0){
$(this).addClass("warning")
return true
} else {
return false
}
});
if (emptyFields.length === 0) {
$(this).prop('disabled', true);
document.getElementById('incompleteWarning').style.display = 'none';
document.getElementById('bePatient').style.display = 'inline';
google.script.run.withSuccessHandler(fileUploaded).uploadFiles(this.parentNode);
} else{
$(this).val("Submit Application")
document.getElementById('incompleteWarning').style.display = 'inline';
document.getElementById('incompleteWarning').style.color = 'red';
}
});
</script>
我尝试将其分解为下面的代码,但现在它甚至无法在 Chrome 中运行。我做错什么了吗?
<script type="text/javscript">
$('#submitbutton').on('click', validatefunction('#submitbutton'));
function validatefunction(this) {
$(this).val("Submitting...");
//check for required fields
var emptyFields = $('[required]').filter(filterfunction(index));
if (emptyFields.length === 0) {
$(this).prop('disabled', true);
document.getElementById('incompleteWarning').style.display = 'none';
document.getElementById('bePatient').style.display = 'inline';
google.script.run.withSuccessHandler(fileUploaded).uploadFiles(this.parentNode);
} else{
$(this).val("Submit Application");
document.getElementById('incompleteWarning').style.display = 'inline';
document.getElementById('incompleteWarning').style.color = 'red';
}
};
function filterfunction(this){
$(this).removeClass("warning");
if ($(this).val().length === 0){
$(this).addClass("warning");
return true;
} else {
return false;
}
};
</script>
jQuery 将使用先前预期的上下文调用您的函数。这意味着您只需要做:
$('[required]').filter(filterfunction);
和
$('#submitbutton').on('click', validatefunction);
我需要取消嵌套以下代码,因为严格 javascript 在 Safari 和 Firefox 中抛出错误(出于某种原因它在 Chrome 中有效)说函数只能在顶层或紧接在另一个函数中并且 $ 不是函数。所以我想我需要拆分函数声明。该代码应该遍历表单中所有必需的元素,并在未使用所有必需字段时阻止提交。
其他注意事项:我正在使用 Google Apps Script 进行开发,这需要严格的 javascript。另请注意,“#submitbutton”实际上是一个常规按钮,它调用处理提交的 google.script。
原码:
<script type="text/javascript">
$('#submitbutton').on('click', function() {
$(this).val("Submitting...");
//check for required fields
var emptyFields = $('[required]').filter(function() {
$(this).removeClass("warning");
if ($(this).val().length === 0){
$(this).addClass("warning")
return true
} else {
return false
}
});
if (emptyFields.length === 0) {
$(this).prop('disabled', true);
document.getElementById('incompleteWarning').style.display = 'none';
document.getElementById('bePatient').style.display = 'inline';
google.script.run.withSuccessHandler(fileUploaded).uploadFiles(this.parentNode);
} else{
$(this).val("Submit Application")
document.getElementById('incompleteWarning').style.display = 'inline';
document.getElementById('incompleteWarning').style.color = 'red';
}
});
</script>
我尝试将其分解为下面的代码,但现在它甚至无法在 Chrome 中运行。我做错什么了吗?
<script type="text/javscript">
$('#submitbutton').on('click', validatefunction('#submitbutton'));
function validatefunction(this) {
$(this).val("Submitting...");
//check for required fields
var emptyFields = $('[required]').filter(filterfunction(index));
if (emptyFields.length === 0) {
$(this).prop('disabled', true);
document.getElementById('incompleteWarning').style.display = 'none';
document.getElementById('bePatient').style.display = 'inline';
google.script.run.withSuccessHandler(fileUploaded).uploadFiles(this.parentNode);
} else{
$(this).val("Submit Application");
document.getElementById('incompleteWarning').style.display = 'inline';
document.getElementById('incompleteWarning').style.color = 'red';
}
};
function filterfunction(this){
$(this).removeClass("warning");
if ($(this).val().length === 0){
$(this).addClass("warning");
return true;
} else {
return false;
}
};
</script>
jQuery 将使用先前预期的上下文调用您的函数。这意味着您只需要做:
$('[required]').filter(filterfunction);
和
$('#submitbutton').on('click', validatefunction);