tedbyers Posted April 16, 2012 Share Posted April 16, 2012 Here is a Javascript function that mostly works (NB: the double quote marks are escaped as this is actually written to the response by a Perl CGI script): function getUserRow(t) { var col=t.cellIndex; var row=t.parentNode.rowIndex; var procTable = document.getElementById(\"usertable\"); var uform = document.getElementById(\"uform\"); var StrippedString = (procTable.rows[row].cells[0].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.ufuid.value = StrippedString; StrippedString = (procTable.rows[row].cells[1].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.fname.value = StrippedString; StrippedString = (procTable.rows[row].cells[2].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.lname.value = StrippedString; StrippedString = (procTable.rows[row].cells[3].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.uemail.value = StrippedString; StrippedString = (procTable.rows[row].cells[4].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.uphone.value = StrippedString; StrippedString = (procTable.rows[row].cells[5].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.agentid.value = StrippedString; StrippedString = (procTable.rows[row].cells[6].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.merchantid.value = StrippedString; StrippedString = (procTable.rows[row].cells[7].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.usertypeid.value = StrippedString; StrippedString = (procTable.rows[row].cells[8].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.username.value = StrippedString; StrippedString = (procTable.rows[row].cells[9].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); uform.pwd.value = StrippedString; uform.usersave.value = 'Update Data'; } NB: for the curious, the use of StrippedString, with the regex, is a device I use to get rid of HTML tags that get placed around the tables' cells by the CSS file and accompanying javascript, that makes the tables look niver and behave more like a spreadsheet, sans in place editing). Only the agentid and merchantid inputs on the form do not get the proper values. I believe the reason is that for the text inputs, it is easy to just copy the text from the table's cells into the form, and all but 3 of the controls on this form are text input controls. There is one select control that does work, user type. But the two select controls, for the agent ID and merchant ID (if one is selected, the other can not be), do not get the values read from the database. Here is my guess as to why. (one reason I am not fond of Javascript programming, vs C++, is I don't have a debugger that lets me step through the code, or an editor that will tell me what members a particular object has that I could use). In the case of the user ID, what is displayed inthe table is the actual numbe used for the ID in the database, and that matches the value provided in the select control, but not the corresponding text in that control. That makes the text in the table a bit less user friendly, and was going to have my server-side code replace that.number by the text that describes the useer type. I suspect, though, that doing so will break that control here too. That is exactly what I had done with the two select controls that do not work. In there cases, I had the server-side code replace the number representing the ID by the merhcnat's name or the agent's name. Doing so makes the data inthe table more user friendly, but it means that the select controls for them do not get properly populated when I click on a given user. Now, the kicker is that all the text that is displayed in the columns for the agents' and merchants' names exist in the select control.as that is how the data was initally entered. (My objective, BTW, is to support editing data that already exists in the DB. So, my question is, "How do i modify the above Javascript code so that the two select controls in question actually work (as in display the data that is in the user's row that was clicked)?" Thanks Ted Link to comment Share on other sites More sharing options...
justsomeguy Posted April 16, 2012 Share Posted April 16, 2012 one reason I am not fond of Javascript programming, vs C++, is I don't have a debugger that lets me step through the code, or an editor that will tell me what members a particular object has that I could useThese are built in to most browsers today, check the links in my signature for information. If you're not checking for Javascript errors there, that should be your first step. You can also set breakpoints or inspect any object. Inside Javascript, you can use console.log to display the value of a certain variable or object in the developer console. For a select element it may not be enough to just set the value property, you may need to loop through the list of options to find the one with the correct value and use its index to set the select element's selectedIndex property. http://www.w3schools.com/jsref/prop_select_selectedindex.asp Link to comment Share on other sites More sharing options...
tedbyers Posted April 16, 2012 Author Share Posted April 16, 2012 Thanks for this. I tried replacing my code above for the agentID by the following: var ndx = -1; var imax = uform.agentid.options.length; StrippedString = (procTable.rows[row].cells[5].innerHTML); StrippedString = StrippedString.replace(/(<([^>]+)>)/ig,\"\"); for (i = 0 ; i < imax ; i++) { if (uform.agentid.options[i] == StrippedString) { ndx = i; } } uform.agentid.selectedIndex = ndx; Alas, this change in my code did not help. The agent select control still does not get set to the correct value. Firefox, BTW, is telling me that there are no Javascript errors. Since you suggested looping through the options inthe control, the above loop seemed to be the obvious result. So, what did I miss? Is there any chance that the values in either the select control or the table have invisible characters, for whatever reason (unknown to me as my server side code doesn't add anything to the strings displayed/stored in the db). Perhaps leading or trailing unprintable characters? Since I can see every string that is displayed in that column in the table is in the select control as one fo the options, I can not understand why my loop didn't find the index of the value in the table and set the value in select control accordingly. WHat is my error now? Thanks Ted Link to comment Share on other sites More sharing options...
justsomeguy Posted April 16, 2012 Share Posted April 16, 2012 The options array is an array of option objects, you'll need to check the value for each option: uform.agentid.options.value Link to comment Share on other sites More sharing options...
tedbyers Posted April 17, 2012 Author Share Posted April 17, 2012 Thanks. That didn't work, but since the problem was the text I displayed in the table were not the values in the select control, I wondered if there was a text data member of option also. I took a shot, and behold, it worked. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.