所以我现在正在处理一个web表单,一旦有了特定的值,我需要禁用所有形式的输入。一旦下拉列表达到该值,有没有一种简单的方法可以处理?目前我正在做这个:
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是我的元素,#inputs包含所有我想在#has_contral的值为0时禁用的输入。**
但这并不理想。有没有更好的方法可以做到这一点,而不是每隔X秒就检查一次?
您可以在更改时检查值,而不是每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);
我不完全确定我是否理解您的需求,但这对您有用吗?
以下假设#has_contract
是<select>
元素:
$("#has_contract").change(function() {
if ($("#has_contract").val() == 0) disable();
});
首先,您应该将元素缓存为一个变量,然后针对该变量运行函数。
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);
});