所以我现在正在开发一个webform,一旦有特定值,我需要禁用所有形式的输入。只要下拉列表达到该值,是否有一种简单的方法可以处理? 目前我正在这样做:
setInterval('check()', 5000);
function check() {
// Disable all fields if the answer was no.
if ($("#has_contract").val() == 0) {
disable();
}
function disable() {
$("#inputs *").prop('disabled', true);
alert("There is no contract, please get a contract.");
}
has_contract是我的元素,如果#has_contract的值为0,则#inputs包含我想要禁用的所有输入。**
但这并不理想。 有没有更好的方法来做到这一点,而不是经常检查每X秒的数量?
答案 0 :(得分:2)
您可以检查更改后的值,而不是每隔5秒检查一次该值。
// collect elements
var $hasContract = $("#has_contract");
var $inputs = $("#inputs input");
// on change, check the input
$hasContract.on('change', checkForm);
// Checks the hasContract input for a value
// of 0. If it does, disable the form.
function checkForm() {
if($hasContract.val() == 0) {
$inputs.attr('disabled', true);
}
}
此外,当您使用setTimeout或setInterval时,您不必使用字符串。 Javascript支持将函数作为变量传递。见下文。
// Do NOT do this
setInterval('check()', 5000);
// Do this instead
setInterval(check, 5000);
// or this
setInterval(function() {
//preform the check...
}, 5000);
答案 1 :(得分:0)
我不完全确定我理解你的要求,但这对你有用吗?
以下假设#has_contract
是<select>
元素:
$("#has_contract").change(function() {
if ($("#has_contract").val() == 0) disable();
});
答案 2 :(得分:0)
首先,您应该将元素缓存为变量,然后针对该变量运行该函数。
var myInputs
$(document).ready(function(){
myInputs = $("#inputs input"); // or '#inputs *' if you're excited about the asterix
});
第二件事,如果我正确地阅读你的设置,你将每5秒弹出一个警告框,直到用户选择了“是”合同。这会让QUITE感到烦恼,他们可能不希望在那之后与你签订合同。
如果没有真正看到您的页面,我想更好的解决方案是在点击页面上的某种提交按钮时检查合同=是。
$('#mySubmitButton').click(function(){
if ($("#has_contract").val() == 0) {
disable();
}
});
但也许更进一步,你真正想做的是在他们同意合同后让他们访问表格。因此,您应该默认禁用表单(编码到html中禁用所有内容),并将函数附加到启用表单的“是”按钮。此外,如果他们之前点击了“是”,您可以将功能附加到重新禁用它的“否”按钮。
$('#myYesBtn').click(function(){
myInputs.prop('disabled', false);
});
$('#myNoBtn').click(function(){
myInputs.prop('disabled', true);
});