14

That is the form:

<form action="" method="GET">
  <input type="text" name="para1">
  <input type="text" name="para2">
  <input type="submit" value="search">
</form>

Now when I fill out only the first field I get example.com/?para1=value&para2= But I just want it to be example.com/?para1=value because para2 don't contains value. How can I do this? Should be possible with JS or anything?

6
  • on submit remove the empty elements Commented May 8, 2014 at 4:29
  • using js, set the disabled property (disabled form elements do not post back) e.g. '$('##').prop(disabled, true); but better to handle this in your controller/action method Commented May 8, 2014 at 4:32
  • I only know PHP could you give me a full code please? Commented May 8, 2014 at 4:34
  • @EddyUnruh Don't you see my answer below? Commented May 8, 2014 at 4:39
  • I see but still have a problem with the ? at the end by submitting empty form. When there will be no solution then I will accept your answer Commented May 8, 2014 at 4:56

3 Answers 3

20

Try this,

Include jQuery and use following snippet.

$(document).ready(function(){
    $("form").submit(function(){
        $("input").each(function(index, obj){
            if($(obj).val() == "") {
                $(obj).remove();
            }
        });
    });
});
Sign up to request clarification or add additional context in comments.

4 Comments

Thats nice but I still always get the ? after submiting so: example.com? is there a way to avoid that?
What I need is when a user is on example.com?para=value and he try to remove it by submiting empty field he should get example.com but he gets example.com?
Personally I would set the attr name to empty, because when the user submits the page it may flicker and so on. With an empty name, it won't appear in the request either.
@Wouter0100 Good idea. Appreciated
3

Something like this would be the plain javascript version:

<form id="theform" action="" method="GET" onsubmit="return removeEmpties()">
    <input type="text" name="para1"/>
    <input type="text" name="para2"/>
    <input type="submit" value="search"/>
</form>
<script>
  function removeEmpties() {
        var form = document.getElementById("theform");
        var inputs = form.children;
        var remove = [];
        for(var i = 0; i < inputs.length; i++) {
            if(inputs[i].value == "") {
                remove.push(inputs[i]);
            }
        }

        if(remove.length == inputs.length - 1)
          return false;

        for(var i = 0; i < remove.length; i++) 
          form.removeChild(remove[i]);
        return true;
    }
</script>

2 Comments

This works too but there is still left the ? when I submit empty fields, it can't be avoided?
I guess you could prevent the form submitting if there was no input filled out -- see example above.
0

put onclick on submit button to call submitFunc() , rather than use form action:

<input type="button" onClick="submitFunc();" value="Pass Parameters"/>

js functions:

<script language="javascript" type="text/javascript">

function submitFunc()
{
   loopRemove("text",3);
   document.testform.action = "file:///C:/Users/mwafi/Desktop/test.html";
   document.testform.submit();
}

function loopRemove(startName,count)
{
  for(var i=1;i<=count;i++)
  {
    if(document.getElementById(startName+i).value=="")
    {
        var t = document.getElementById(startName+i);
        t.parentNode.removeChild(t);
    }
  }  
}

</script>

full code with HTML form:

<html>

<title>Pass non-empty parameters</title>

<head>

<script language="javascript" type="text/javascript">

function submitFunc()
{
   loopRemove("text",3);
   document.testform.action = "http://www.google.com/";
   document.testform.submit();
}

function loopRemove(startName,count)
{
  for(var i=1;i<=count;i++)
  {
    if(document.getElementById(startName+i).value=="")
    {
        var t = document.getElementById(startName+i);
        t.parentNode.removeChild(t);
    }
  }  
}

</script>

</head>

<body onload="document.testform.reset();">

 <form name="testform">

  <h3>Pass Non-empty parameters</h3>

  Parameter 1 : <input type="text" name="text1" id="text1" /><br>
  Parameter 2 : <input type="text" name="text2" id="text2" /><br>
  Parameter 3 : <input type="text" name="text3" id="text3" /><br><br>
  <input type="button" onClick="submitFunc();" value="Pass Parameters"/>

 <form>

</body>

</html>

remember don't use form action.

source: http://www.scriptsplash.com/2009/07/passing-only-non-empty-fields-on-form.html

1 Comment

What would be the benefit not to using form action? SEO? document.testform.action = "file:///C:/Users/mwafi/Desktop/test.html"; wouldn't work its an rewritten php file

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.