下拉更改时禁用输入

时间:2013-06-27 22:56:42

标签: 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() {
    $("#inputs *").prop('disabled', true);
    alert("There is no contract, please get a contract.");
}

has_contract是我的元素,如果#has_contract的值为0,则#inputs包含我想要禁用的所有输入。**

但这并不理想。 有没有更好的方法来做到这一点,而不是经常检查每X秒的数量?

3 个答案:

答案 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);
});