3

所以我现在正在处理一个网络表单,一旦有一个特定的值,我需要禁用所有形式的输入。一旦该下拉列表达到该值,是否有一种简单的方法可以处理?目前我正在这样做:

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 秒不断检查一次?

4

3 回答 3

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);
于 2013-06-27T23:54:45.900 回答
0

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

下面假设它#has_contract是一个<select>元素:

$("#has_contract").change(function() {
    if ($("#has_contract").val() == 0) disable();
});
于 2013-06-27T23:04:23.183 回答
0

首先,您应该将元素缓存为变量,然后针对该变量运行函数。

var myInputs
$(document).ready(function(){
   myInputs = $("#inputs input"); // or '#inputs *' if you're excited about the asterix
});

第二件事,如果我正确阅读了您的设置,您将每 5 秒弹出一个警报框,直到用户选择“是”合同。那会很烦人,之后他们可能不想与您签订合同。

在没有实际看到您的页面的情况下,我想一个更好的解决方案是在单击页面上某种提交按钮时检查 contract=yes 。

$('#mySubmitButton').click(function(){
  if ($("#has_contract").val() == 0) {
    disable();
  }
});

但也许更进一步,您真正想做的是在他们同意合同后让他们访问表格。因此,您应该默认禁用表单(编码到禁用所有内容的 html 中),并将功能附加到启用表单的“是”按钮。此外,如果他们之前单击了“是”,您可以将功能附加到重新禁用它的“否”按钮。

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

$('#myNoBtn').click(function(){
  myInputs.prop('disabled', true);
});
于 2013-06-27T23:20:16.153 回答