Dear Nintex community
I am starting my adventure with Nintex, JS and jQuery.
I've spent alredy few hours trying to find solution this but seems that I still missing the concept...
So what I have:
1. List on sharepoint with column "State"
2. In forms I've assigned as follows:
3. I've written this code in CustomJS field:
var Sstate = NWF$('#' + varState);
console.log("Sstate= " + Sstate + " Sstate.val()= " +Sstate.val()+ " Sstate.text()= " + Sstate.text() + " varState= " + varState);
4. and this is what I received in console log when I am opening the form:
Sstate= [object Object] Sstate.val()= undefined Sstate.text()= varState= ctl00_ctl54_g_2e434ee3_cc48_4bca_87f0_294c48339002_ctl00_ListForm1_formFiller_FormView_ctl38_cd490519_949d_48e6_90af_d0f96aacd0a9
What the hell I am doing wrong? 🙂 Why I cant see nowhere in console log that the value of field State is "NH"? Please help! 🙂
Solved! Go to Solution.
Moving on, the reason you're having an issue is because of how Nintex Forms generates the Form in different modes.
I noticed that you're in View Mode on in your screenshot, and wouldn't ya know, Nintex Forms (which I will now refer to simply as "Forms") doesn't actually generate IDs and place them onto the elements! Though it still creates the variable that it's obligated to make, it puts a GUID inside of it that doesn't actually point back to any ID on an element! Yay!
That being said, there IS some useful information there if you know what you're looking for.
Notice how the parent Div Element (where the mouse pointer is) has an attribute called "data-controlname". See that value? That's the same name of the Control as given on the Form in the settings:
Because the name of the control is ALWAYS applied to the topmost level of a Control (the ONE exception being Panels... because they are silly), you can use it in more places and in a more reliable way than you can with the ID variables.
Using the name shown above ("slt_State"), you could use the following code to grab the value:
Now you should be able to get the value of your controls no matter which mode you're viewing the form in!
I hope this helps!
Additional Notes: There are a few other topics which may be of interest but necessarily relevant to your situation. I would just like to make you aware of them in the event that they come up.
I hope this isn't too overwhelming! Please ask more questions as they come to you!
@MegaJerk Thanks for the input, I just have a question left.
What I'm doing is copying the attachments from the task to the main item (via workflow) and updating the NFFormData of the item to position them correctly. I am now trying to do it the other way around : getting the attachments from NFFormData from the main item to display them at the correct position (with the control name) on my task form via JS.
I noticed that the datac-controlname is not generated for attachments on form, but the NFFormData is correctly saved after the submit of the form.
My question is : how is it possible to get the correct attachment control on a form with JS except via using a CSS class ?
I suppose it should be possible since Forms is doing some kind of mapping between "data-controlid" (or "formcontrolid") and "data-controlname".
I'm not entirely sure I understand what the problem is, but you can target your attachment controls by using a class instead of a Control Name.
(Notice that there is a space between classes)
The other Attachment Control has a class of "attachment2".
Using the code:
NWF$(".attachments1"); //or NWF$(".attachments2");
Does this solve your issue?
I don't really have a problem per say, it's more some questions I've been trying to answer.
I usually target my controls on my form with data-controlname, this way I do not have to change the form to add CSS classes.
I had some forms with hundreds of controls (yeah.. I know...), so when I don't have to add a CSS on dozens on controls, I prefer not to.
For example, I target the Title control with :
The thing is that the name of the attachments control does not generate a data-controlname attribute in the DOM, so this does not work :
I was wondering how to get do the mapping between the data-controlid and the data-controlname, because attachments controls have a data-controlid.
I'm guessing there's some way to it, I'm just not sure how. That was my question 😉
Ah. The Attachment Controls *do* get a Control Name, it's just that they can't be set by anything we do and is always automatically generated as "Attachment Control", which is useless for differentiating between multiple Attachment Controls. There is nothing we can do to change it.
Because of this I would recommend just using a class to target them as the code change is marginally different. You could also throw them into a Panel with a specific control name, but because the Panels *ALSO* have problems with control names (they will become truncated depending on a few conditions... making them unreliable), I'd recommend just sticking to classes.
To clarify, because I just thought of something, you have the ability to set the name to whatever you'd like (though I do not know if it would mess anything up when the information was trying to post to Sharepoint upon Form Submit) via the clientside js. It's just that it doesn't seem worth the effort when you'd need to target the individual controls via some other means (ie: classes), and if you're going through the effort of doing that... why not just keep that methodology elsewhere?
Giving them a unique class, looping through each Attachment Control, and setting the data-controlname to the custom class name would certainly be one way to approach it, but it would also be long winded and not entirely worthwhile imo.
I hope that this helps.