2016-09-05 3 views
0

Mein JSFiddle hereSerializeObject und SerializeArray nicht auf console.log

besagen weiß ich, hat es in SO dazu hier viele Beiträge gewesen, aber ich frage mich, warum diese (SerializeObject/Serialize/SerializeArray()) wird nicht in meinem console.log nach onclick angezeigt.

HTML:

<form action="#" method="post" id="testform" name="testform"> 
      <input class="input_rid" type="text" name="rid" id="rid" value="" placeholder="rid" required> 
      <input class="input_recipient_id" type="text" name="recipient_id" id="recipient_id" value="" placeholder="recipient_id" required> 
       <select class="select_eml" name="email_type" id="email_type" required> 
        <option value="" selected="selected" disabled="disabled"> 
         Email type 
        </option> 
        <option value="Body">Body</option> 
        <option value="Body & Attachment">Body & Attachment</option> 
        <option value="Link">Link</option> 
        <option value="Internal Attachment">Internal Attachment</option> 
        <option value="External Attachment">External Attachment</option> 
        </select> 
       <select class="select_tcb" name="to_cc_bcc" id="to_cc_bcc"> 
        <option value="" selected="selected" disabled="disabled"> 
         To_CC_BCC 
        </option> 
        <option value="to">To</option> 
        <option value="cc">CC</option> 
        <option value="bcc">BCC</option> 
        </select> 
      <input class="input_sd" type="date" name="start_dte" id="start_dte" value="" placeholder="start_dte" required> 

      <input class="input_ed" type="date" name="end_dte" id="end_dte" value="" placeholder="end_dte"> 
      <input class="button small radius right inline" type="button" onclick="return test();" value="Save to Console Log"> 

</form> 

JS:

$.fn.serializeObject = function() 
{ 
    var o = {}; 
    var a = this.serializeArray(); 
    $.each(a, function() { 
     if (o[this.name]) { 
      if (!o[this.name].push) { 
       o[this.name] = [o[this.name]]; 
      } 
      o[this.name].push(this.value || ''); 
     } else { 
      o[this.name] = this.value || ''; 
     } 
    }); 
    return o; 
}; 


function test() { 
var v = $("#testform").serializeObject(); 
console.log(v); 
console.log($("#testform").serialize()); 
console.log($("#testform").serializeArray()); 
} 

Antwort

1

Das Problem hierbei ist, dass die Testfunktion innerhalb eines Fenster Liest Gültigkeitsbereich deklariert wird, und wenn Sie auf dieser Taste, um den Interpreter kann klicken Sie auf‘ t finde die aufgerufene Funktion.

Um das Beispiel arbeiten, die Funktionsdeklaration außerhalb des $ (Fenster) .auf (‚load‘) Umfang bewegen oder es nur global deklarieren:

window.test = function() { 
var v = $("#testform").serializeObject(); 
console.log(v); 
console.log($("#testform").serialize()); 
console.log($("#testform").serializeArray()); 
} 
+0

ist es eine Möglichkeit, es in [einzukapseln { }]? – Odinovsky

+0

IMHO, der beste Weg, um dieses Problem zu begegnen, ist die Verwendung von Ereignissen, um den Knopf Klick zu fangen und rufen Sie dann Ihre Funktion. Z.B. $ (Element) .on ('click', test); – zangarmarsh

Verwandte Themen