Bug: Cannot read property ‘hiddenBy’ of undefined

Forums SPJS-Lookup Bug: Cannot read property ‘hiddenBy’ of undefined

Tagged: 

Viewing 9 reply threads
  • Author
    Posts
    • #31949
      Ross
      Participant

      Hi Alex,

      There may be a bug in the SPJS-lookup code which is causing the forms to crash on load.

      Environment

      SharePoint 2010 (still…)
      version: DFFS_2020-09-29 (occurs on earlier versions as well)
      browser: Chrome and IE 10

      File
      DFFS_2020-09-29/plugins/SPJS-lookup.js

      Stack and Source

      See attached image. The green arrow shows where I think you have captured the behaviour for attachments. The red arrow shows where it may have been missed.

      Suggested Fix

      "toggleVisibleFieldsByTab": function () {
        var d,
          index,
          rowObj = {};
        jQspjs(".spjs_formtable_row").each(function (i, a) {
          var b = spjs.dffs.getFinFromTr(a);
          rowObj[b] = a;
        });
        d = spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].fields.slice(0);
        if (d.length === 0) {
          d = spjs.dffs.data.initialFieldsArr;
        }
        spjs.dffs.sideBySide.clear();
        jQspjs.each(d, function (i, a) {
          var b = spjs.dffs.getRowId(a);
          if (
            a !== "Attachments" &&
            spjs.dffs.fieldtype[a] !== "dffs_html" &&
            spjs.dffs.fieldtype[a] !== "dffs_row" &&
            spjs.dffs.fieldtype[a] !== "dffs_heading"
          ) {
            if (jQspjs(b).length === 0) {
              var c =
                "<tr id='dffs_" +
                a +
                "' fieldinternalname='" +
                a +
                "' class='spjs_formtable_row dffs_missingField' style='display:none;cursor:default;'><td class='ms-formlabel'><span class='ms-h3 ms-standardheader'>" +
                a +
                "</span></td><td class='ms-formbody'><div style='color:red;border:1px red dashed;padding:3px;margin:1px;'>This field has been deleted or is not in the current content type.</div></td></tr>";
              if (jQspjs(".dffsTabRow")[0].tagName === "TR") {
                jQspjs(".dffsTabRow").after(c);
              } else {
                jQspjs("table.ms-formtable").prepend(c);
              }
              rowObj[a] = jQspjs(b);
              spjs.dffs.data.hiddenColTrackerObj[a] = {
                hidden: true,
                hiddenBy: {
                  tab: true,
                  rule: false,
                  accordion: false,
                  accordionID: {},
                },
                readonly: false,
              };
            }
          }
          if (i > 0) {
            jQspjs(rowObj[a]).insertAfter(jQspjs(rowObj[d[i - 1]]));
          } else {
            if (
              spjs.dffs.fieldtype[a] === "dffs_html" ||
              spjs.dffs.fieldtype[a] === "dffs_row" ||
              spjs.dffs.fieldtype[a] === "dffs_heading"
            ) {
              jQspjs(rowObj[a]).insertBefore(jQspjs(".ms-formtable tr:first"));
            }
          }
        });
        jQspjs(".spjs_formtable_row").each(function (i, a) {
          var b = spjs.dffs.getFinFromTr(a);
          if (b === undefined) {
            return;
          }
          index = jQspjs.inArray(b, d);
          if (index === -1) {
            /*
            BUG: b is undefined for attachments
            FIX: check if 'b' is undefined and if the table row ('a') id equals 'idAttachmentsRow', set b to the correct field internal name
          */
            if (!b && a.id === "idAttachmentsRow") {
              b = "Attachments";
            }
      
            spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.tab = true;
            if (b.indexOf()) jQspjs(a).hide();
            spjs.dffs.data.hiddenColTrackerObj[b].hidden = true;
          } else {
            if (
              spjs.dffs.data.hiddenColTrackerObj[b].hidden &&
              jQspjs.inArray(b, spjs.dffs.data.initialHiddenFields) < 0
            ) {
              spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.tab = false;
              if (!spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.rule) {
                jQspjs(a).show();
                spjs.dffs.data.hiddenColTrackerObj[b].hidden = false;
              }
            } else {
              jQspjs(a).show();
            }
          }
          if (
            !spjs.dffs.data.isSP07 &&
            typeof spjs.vLookup !== "undefined" &&
            b.indexOf("vLookup") === 0 &&
            index > -1
          ) {
            spjs.dffs.loadTime("Initiating vLookup on " + b);
            setTimeout(function () {
              spjs.vLookup.renderField(b);
            }, 100);
          }
        });
        if (
          spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].sbs !== undefined &&
          spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].sbs.length > 0
        ) {
          spjs.dffs.sideBySide.apply(
            spjs.dffs.data.tabConfigObj[spjs.dffs.data.selectedTab].sbs
          );
        }
        spjs.dffs.resizeDlg("toggleVisibleFieldsByTab");
      }
      • This topic was modified 3 years, 9 months ago by Ross.
      • This topic was modified 3 years, 9 months ago by Ross.
      • This topic was modified 3 years, 9 months ago by Ross.
    • #31955
      Alexander Bautz
      Keymaster

      Can you hover over the Enhanced with DFFS link and check the “License and version information” to ensure your browser hasn’t cached the previous version of DFFS?

      Alexander

    • #31963
      Ross
      Participant

      I can’t hover over the Enhanced with DFFS link as the form crashes during loading.

      My cache is disabled and cleared for good measure. I think the file is related to the vLookup script and not the lookup script.

      • This reply was modified 3 years, 9 months ago by Ross.
    • #31968
      Alexander Bautz
      Keymaster

      OK,
      Unfortunately I don’t have a SP 2010 environment to test in. Are you able to set a break in the line where the error occurs (your red arrow) by clicking in the line number in the left column. Reload the page and use F8 to step one field at the time and see what [b] is when it fails – that will give you the field internal name of the field.

      Alexander

    • #33330
      Matthew Wolfe
      Participant

      This is happening to us as well, using the latest dffs V4.4.5.22_2021-04-25 on SP2013.

      Unable to get property ‘hiddenBy’ of undefined or null reference
      eval code (329) (1,115855)

      Tested in IE11, Edge Chromium and Chrome.

      Appears to be occurring in the following lines. What is the fix?
      {spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.tab=true;if(b.indexOf())jQspjs(a).hide();spjs.dffs.data.hiddenColTrackerObj[b].hidden=true}else{if(spjs.dffs.data.hiddenColTrackerObj[b].hidden&&jQspjs.inArray(b,spjs.dffs.data.initialHiddenFields)<0){spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.tab=false;if(!spjs.dffs.data.hiddenColTrackerObj[b].hiddenBy.rule){jQspjs(a).show();spjs.dffs.data.hiddenColTrackerObj[b].hidden=false}}

    • #33332
      Matthew Wolfe
      Participant

      More Details from Chrome Console
      VM222:1 Uncaught TypeError: Cannot read property ‘hiddenBy’ of undefined
      at HTMLTableRowElement.eval (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:115893)
      at Function.each (jQuery.js?v=1619620789687:2)
      at n.fn.init.each (jQuery.js?v=1619620789687:2)
      at Object.toggleVisibleFieldsByTab (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:115738)
      at Object.do_toggleSelectedTab (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:119314)
      at Object.initSelectedTab (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:129936)
      at Object.applyRules (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:226205)
      at Object.loadCustomJS (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:195546)
      at Object.loadDependencies (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:197060)
      at HTMLDocument.eval (eval at <anonymous> (DFFS_frontend_min.js:9), <anonymous>:1:170204)

      After using console to put a break in there, it iterates through the fields, down to “ID”, then it iterates to a blank item “”, which causes the error.

      • This reply was modified 3 years, 3 months ago by Matthew Wolfe.
    • #33335
      Alexander Bautz
      Keymaster

      Can you show me a screenshot of the fields you have configured in the tab where you get this error? – also, if you can explain what you do when you get this error it might help me try to figure it out.

      PS: Remove any sensitive information from the screenshots. If you want to email them to me rather than post them here you can email them on the address you get this notification from.

      Alexander

    • #33339
      Matthew Wolfe
      Participant

      Thanks for the reply Alex!
      I figured it out. The user had pasted some text into a multi-line text field in one record, and it had some special characters. Once I cleaned up the text for them, it renders the form just fine, no error.
      Let me know if you need any other details, otherwise, I think I’m set.

      • #33343
        Alexander Bautz
        Keymaster

        I’m glad you figured it out. I don’t need anything else from you on this, but I’m also not sure this is something I can prevent.

        Alexander

    • #33345
      Matthew Wolfe
      Participant

      No problem. Thank you for the solid tool!
      Will educate the team to help avoid this in the future.
      Take care!

    • #33598
      Ross
      Participant

      For anyone else looking at this bug. This issue does not occur in the latest versions of DFFS (as of 21 May 2021).

      I’m not sure what version resolved it but using the latest DFFS should be enough.

Viewing 9 reply threads
  • You must be logged in to reply to this topic.