As discussed in this thread (and also here and here) I also expirienced strange behaviour in Join Form on a client website (it also happend on local development machine and dev-server too).
So I dug deeper and here's what I found: when generating fake fields' names and css classes for <tr> a lot of times there were collisions in "random" strings, so that real fields become hidden (because some fake one had the same class) and sometimes form did not submit because required field names were just the same and were rendered of wrong type. Here are some examples:
So as it was clear to be randomness issue I replaced 2 lines in JoinForm::addFakeQuestions() method (\ow_system_plugins\base\controllers\join.php):
$randName = UTIL_String::getRandomString(rand(5, 16), 2);
$question['trClass'] = uniqid('ow_'.rand(0, 99999999999));
with random generation using openssl_random_pseudo_bytes() function:
$randName = rtrim(strtr(base64_encode(openssl_random_pseudo_bytes(rand(5, 16))), '+/', '-_'), '=');
$question['trClass'] = 'ow_'.rtrim(strtr(base64_encode(openssl_random_pseudo_bytes(rand(17, 21))), '+/', '-_'), '=');
And it really had the job done - no more problems with Join Form. So I think it's worth checking for Oxwall Devs. Hope this little investigation helps.