禁用下拉更改输入



所以我现在正在处理一个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);
});

相关内容

  • 没有找到相关文章

最新更新