Javascript 禁用下拉更改时的输入

Javascript 禁用下拉更改时的输入,javascript,jquery,drop-down-menu,event-handling,Javascript,Jquery,Drop Down Menu,Event Handling,所以我现在正在处理一个webform,一旦一个表单有了特定的值,我就需要禁用所有形式的输入。一旦下拉列表达到该值,是否有一种简单的处理方法? 目前我正在这样做: setInterval('check()', 5000); function check() { // Disable all fields if the answer was no. if ($("#has_contract").val() == 0) { disable(); } function disable() {

所以我现在正在处理一个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#u contract是我的元素,如果has#u contract的值为0,#inputs包含我想要禁用的所有输入**

但这并不理想。
有没有比每隔X秒检查一次更好的方法呢?

我不能完全确定我是否理解您的要求,但这对您有用吗

以下假设
#has_contract
元素:

$("#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秒弹出一个警报框,直到用户对合同选择“是”。这会让人非常恼火,而且他们可能不想在那之后与你签订合同

在没有实际查看页面的情况下,我认为更好的解决方案是在页面上单击某种提交按钮时检查合同=是

$('#mySubmitButton').click(function(){
  if ($("#has_contract").val() == 0) {
    disable();
  }
});
但也许更进一步,你真正想做的是,一旦他们同意合同,就让他们访问表单。因此,您应该在默认情况下禁用表单(编码到html中,表示所有内容都已禁用),并在启用表单的“是”按钮上附加一个函数。此外,如果用户以前单击过“是”,则可以将函数附加到“否”按钮,以重新禁用该功能

$('#myYesBtn').click(function(){
  myInputs.prop('disabled', false);
});

$('#myNoBtn').click(function(){
  myInputs.prop('disabled', true);
});

您可以在更改时检查值,而不是每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#u合同?一个
或一个文本字段或?听起来不错,调用disable()只会影响has合同吗?