javascript - 如何将命名空间变量传递给单击函数参数变量? jQuery

标签 javascript jquery variables namespaces parameter-passing

所以我找到了一个awesome solution以避免需要在 jQuery 中使用全局变量。我到处提到命名空间,最初我打算使用全局变量。

但是,我无法通过简单的点击函数上的参数发送我的命名空间变量。

我想这样做是因为我需要保存这些变量并用于创建模态窗口,并让应用程序知道哪些动态创建的按钮控制哪些模态。

下面是我首先创建变量的 namespace 对象的示例 我的 jQuery 命名空间对象:

$.reg = { 
    masterRole : " ", 
    role_ID : " ",
    row_Name : " ",
    ary_Check_Role : []
}; 

$(document).ready(function () {
    ...

当您浏览应用程序时,当您单击此按钮时,这些命名空间变量的值就会被设置(从 HTML 中获取数据) 变量在我的 roleBtnClicked 函数上设置

function roleBtnClicked(event){

    $.reg.masterRole  = $(this).html();            /* Get role name: Actor */
    $.reg.role_ID     = $(this).attr('role');      /* Get role-1 */
    $.reg.rowName     = $(this).attr('row');       /* Get row-role-1 */
    $.reg.blueBtn     = $(this).attr('blue');      /* Get blue-btn-1 */

现在,在单击一些复选框并将数据插入数组后,会弹出一个模式窗口,当您单击完成按钮(如下)时,所有变量都需要再次保存到命名空间变量中。

我的完成按钮点击函数,我试图通过参数变量传递我的命名空间变量

$(".doneButton").click(
    {
        param1: $.reg.masterRole,
        param2: $.reg.role_ID,
        param3: $.reg.rowName,
        param4: $.reg.ary_Check_Role
    },
    doneBtnClicked);

function doneBtnClicked(event){
    alert('$.reg.roleName    = '+$.reg.roleName);
    alert('event.data.param1 = '+event.data.param1);

    masterRole= event.data.param1;
    role_ID  = event.data.param2;
    rowName  = event.data.param3;
    ary_Check_Role = event.data.param4;
<小时/>

请注意上面点击函数中的 2 个警报,第一个警报将显示正确的值,但第二个警报不会显示任何内容。在让数组通过时也遇到问题。

所以问题:我应该这样做吗?如何正确地将数组传递到 jQuery 命名空间中,然后将其传递到单击函数参数中?

最佳答案

首先,您应该避免将内容放入 jQuery 对象中。为此使用闭包。

第二:您应该使用 HTML data-... 属性和 jQuery data()将自定义属性附加到 HTML 元素。避免使用非标准属性。

第三:您可以为事件处理程序使用单独的命名函数定义,但是当您实际在代码中为不同元素重复使用这些函数时,这是最有意义的(您似乎没有这样做)那)。例如,使用直接传递给 .click() 的匿名函数会产生更易于理解的代码。

// use this shorthand instead of $(document).ready(function () { ... });
$(function () {

  // variable reg will be available to all functions 
  // defined within this outer function. This is called a closure.
  var reg = { 
    masterRole : " ", 
    role_ID : " ",
    row_Name : " ",
    ary_Check_Role : []
  };

  $(".roleButton").click(function (event) {
    // modify state
    reg.masterRole  = $(this).html();            /* Get role name: Actor */
    reg.role_ID     = $(this).data('role');      /* Get role-1 */
    reg.rowName     = $(this).data('row');       /* Get row-role-1 */
    reg.blueBtn     = $(this).data('blue');      /* Get blue-btn-1 */

    // note that this requires markup like this:
    // <button data-role="foo" data-row="bar" data-blue="baz">

    // ...
  });

  $(".doneButton").click(function (event) {
    // debug output
    alert(JSON.stringify(reg, 2, 2));
  });

});

使用多个 $(function () { ... }); block 来分隔应该分开的内容。

不要忘记始终对您声明的每个变量使用var。没有 var 声明的变量将是全局变量 - 而您不需要全局变量。

关于javascript - 如何将命名空间变量传递给单击函数参数变量? jQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327545/

相关文章:

javascript - findIndex() 总是在包含对象的数组上返回 -1

javascript - 如何使用 Bootstrap-Tour 和动态路径处理多页面游览?

javascript - 如果并行函数已经失败,则阻止函数运行(使用 jQuery $.when())

jquery - $(form).ajaxSubmit 不是函数

java - 全局变量值没有及时更新

javascript - Android转义JavaScript字符串

Javascript递归函数变量null

javascript - 基本 React 代码不产生任何输出

php - 尝试找到一个(jquery?)弹出日期/时间选择器并回调到 php

c# - 将时间四舍五入到最接近的小时