Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:获取元素的值时,是否需要在文档中声明变量?_Javascript_Jquery - Fatal编程技术网

Javascript jQuery:获取元素的值时,是否需要在文档中声明变量?

Javascript jQuery:获取元素的值时,是否需要在文档中声明变量?,javascript,jquery,Javascript,Jquery,我将特定表单元素的值存储为变量。此值在多个函数中使用 function one() { var selectedRole = $('#RegistrationRole_ID').val(); } function two() { var selectedRole = $('#RegistrationRole_ID').val(); } 我想让它成为一个全局变量,这样我就不必在每个函数中一直选择它。所以我的问题是,如果我在documentready块之外声明变量,我仍然能够正确地

我将特定表单元素的值存储为变量。此值在多个函数中使用

function one() {
    var selectedRole = $('#RegistrationRole_ID').val();
}
function two() {
    var selectedRole = $('#RegistrationRole_ID').val();
}
我想让它成为一个全局变量,这样我就不必在每个函数中一直选择它。所以我的问题是,如果我在documentready块之外声明变量,我仍然能够正确地获取值吗

<select id="RegistrationRole_ID">
    <option value="1">one</option>
</select>

我想我可能已经回答了我自己的问题…可能在加载文档时该值会发生变化。实际上,我要做的是删除重复的代码,在这里我多次获得元素的值。你对此有什么建议吗?

有。但是只使用
var
一次,因为它声明了变量

var selectedRole; // selectedRole is now global.
function one() {
    // If one() is called after doc ready
    // selectedRole will be $('#RegistrationRole_ID').val();
    // in it.
}
function two() {
    // If two() is called after doc ready
    // selectedRole will be $('#RegistrationRole_ID').val();
    // in it.
}
$(function() {
    selectedRole = $('#RegistrationRole_ID').val();  // This change that global
    // Now you can use one() and two() w/o redoing the same jQuery
    // over and over again.
    one(); two();
});
更好的选择。只需为所有变量/函数使用一个足够大的作用域,并使用一个自动执行的匿名函数:

(function() {
    var selectedRole; // selectRole is now available everywhere in the anon fun()
                      //   but it is not global
    function one() {
        ...
    }
    function two() {
        ...
    }

    $(function() {
        selectedRole = $('#RegistrationRole_ID').val();  // Change the variable
        // Now you can use one() and two() and
        // selectedRole will be available:

        one(); two()
    });
}());
var getRoleId = (function() {
  var roleField = $('#RegistrationRole_ID').get(0);
  return function() {
    return roleField.value;
  };
})();
我建议不要那样做。如果您想更快/更方便地访问,请编写一个函数:

(function() {
    var selectedRole; // selectRole is now available everywhere in the anon fun()
                      //   but it is not global
    function one() {
        ...
    }
    function two() {
        ...
    }

    $(function() {
        selectedRole = $('#RegistrationRole_ID').val();  // Change the variable
        // Now you can use one() and two() and
        // selectedRole will be available:

        one(); two()
    });
}());
var getRoleId = (function() {
  var roleField = $('#RegistrationRole_ID').get(0);
  return function() {
    return roleField.value;
  };
})();
现在你可以写作了

  if (getRoldId() == 22) { // whatever }

优点是你确实不重复自己:这个角色字段具有全局唯一的“id”值,实际上已经是一个“全局变量”。该函数只是确保您没有执行冗余的“document.getElementById()”调用(通过jQuery),但它保持了诚实,避免了脚本“缓存”值不同步的潜在问题。

这必须进入doc ready内部。-然后执行
函数一()
函数二()
。是,为true,或者在
之前导入的
块中