Edit/Copy pages inserting numbers that are over 1000 with commas

This public forum is for user-to-user discussions of PHPMaker. Note that this is not support forum.
Post Reply
SilentNight
User
Posts: 171

Edit/Copy pages inserting numbers that are over 1000 with commas

Post by SilentNight »

How can I make it so on the Edit/Copy pages numeric values aren't filled into the textboxes with commas eg. 1,000.00? I just want them to fill as 1000.00.


mobhar
User
Posts: 11703

Post by mobhar »

You may Google jquery auto number format.


arbei
User
Posts: 9356

Post by arbei »

If you have enabled the advanced setting Use View Tag format for edit, you may try disable it.


SilentNight
User
Posts: 171

Post by SilentNight »

Combining these two suggestions I came up with:

Client Scripts -> Table-Specific -> Add/Copy Page and Edit Page ->Startup Script
// Remove commas from currency inputs
$("input[name='x_Price']").change(function() {
    var $val = $(this).fields("Price").value().toString();
    $(this).fields("Price").value($val.replace(/,/g,''));
});
$("input[name='x_Price']").trigger('change');

This removes commas while the page is loaded and it has the added benefit of removing commas from price boxes if a user happens to type one.

But this does not work for detail tables within Client Scripts -> Table-Specific -> List Page ->Startup Script and I am unsure why. Could it be for a similar reason as what was discovered here: viewtopic.php?t=55301

I need it to work in detail tables as well. Further assistance would be appreciated.


arbei
User
Posts: 9356

Post by arbei »

You better use Client Side Events instead or you should write correct CSS selectors to select the input elements in the detail grid.


SilentNight
User
Posts: 171

Post by SilentNight »

I'm unsure what you mean, what I wrote was a client side event no?

If you mean try putting it under Client Script rather than Startup Script I did and got the same result.

I also tried iterating through all price inputs with

$("input[name*='Price']").change(function() {
	$("input[name*='Price']").trigger('each');
}

$("input[name*='Price']").each(function() {
    console.log($(this).fields("Price"));
    var $val = $(this).fields("Price").value().toString();
    $(this).fields("Price").value($val.replace(/,/g,''));
});

$("input[name*='Price']").trigger('change');

But this also results in $(this).fields("Price") returning undefined.


arbei
User
Posts: 9356

Post by arbei »

arbei wrote:

You better use Client Side Events

You may click the link and read the docs. "Client Side Events" are under Field Setup -> Edit Tag.


SilentNight
User
Posts: 171

Post by SilentNight »

Ah that makes sense thank you. Within Price -> Field Setup -> Edit Tag:

{ // keys = event types, values = handler functions
	"change": function(e) {
		var $val = $(this).fields("Price").value().toString();
		$(this).fields("Price").value($val.replace(/,/g,''));
	}
}

Prevents user entry of commas into the price inputs however it does not prevent Edit/Copy pages from inserting commas for numbers over 1000 when initially loading the page.

Is there a way to trigger this event when the page loads like I was able to do with the events in Startup Script? I need Edit/Copy pages to not load the commas into the textboxes.


arbei
User
Posts: 9356

Post by arbei »

You may refer to jQuery docs on .triggerHandler().


SilentNight
User
Posts: 171

Post by SilentNight »

This should work somewhere however I don't know where to put it.

$(this).triggerHandler("change"); 

Putting it outside of the brackets in the previous code within Price -> Field Setup -> Edit Tag results in an error preventing the site from generating. And putting it within Startup Script as:

$("input[id*='Price']").triggerHandler("change"); 

results in an error about $("input[id*='Price']").value being undefined.

Within Price -> Field Setup -> Edit Tag I also tried changing this line:

"change": function(e) {

to

"change ready": function(e) {

based on the second example in the PHPMaker docs link but it seemed to have no effect.


arbei
User
Posts: 9356

Post by arbei »

SilentNight wrote:

putting it within Startup Script as:

$("input[id*='Price']").triggerHandler("change"); 

Your CSS selctor is incorrect. You should use a more specific one.


SilentNight
User
Posts: 171

Post by SilentNight »

Ah based on other jQuery help I found on the internet it seemed like the selector input[id*='Price'] would trigger the change event for any inputs with IDs containing "Price". I don't fully understand why but it seems like this doesn't work like this in this case.

So based on your suggestion of being more specific I came up with:

// Client Scripts -> Table-Specific -> Add/Copy Page and Edit Page ->Startup Script
var count = document.getElementById("key_count_fQuoteDetailsgrid").value;
for (let i = 1; i <= count; i++) {
    try {
        $("input[id='x" + i + "_Price']").triggerHandler("change");
    } catch (e) {
        break;
    }
}

Which combined with the previous code in Price -> Field Setup -> Edit Tag works great to prevent detail tables from inserting commas on Edit/Copy and also prevent commas from being entered by users.

Problem solved, thanks for guiding me in the right direction.


Post Reply