2012-04-06 13 views
0

Wenn ich 'Hallo ??' im Textbereich (id = add_new_comment) fügt es ein hallojQuery1704879437133033947_1333718592556 ?? in der Datenbank. Was ist das Problem mit dem Code? Vielen Dank im VorausFehler im Zusammenhang mit shft + Eingabe und Eingabe mit Jquery

$('#add_new_comment').live('keyup',function (event) { 

      /*shft+enter for new line*/ 

     if (event.keyCode == 13 && event.shiftKey) { 
      $(this).val($(this).val()+"\n"); 

      return false; 
     }else if(event.keyCode == 13){ 
      /*code to be inserted in db*/ 
     } 
    }); 

Datenbank-Code (. Dh Modell in codeigniter)

function add_new_comment($comment, $store_id, $comment_source,$user_id) { 
     $data = array(
      'comment' => $comment // comment to be inserted. This contains the text of textarea. 
      'source_id' => $store_id, 
      'comment_source' => $comment_source, 
      'from_user_id' => $user_id 
     ); 
     $result = $this->db->insert(COMMENTS, $data); 

     return $this->db->insert_id(); 
    } 

js Skript (Ist-Code):

$('#add_new_comment').live('keyup',function (event) { 
       if (event.keyCode == 13 && event.shiftKey) { 
        $(this).val($(this).val()+"\n"); 

        return false; 
       }else if(event.keyCode == 13){ 

        var store_id = ""; 

        store_id = $('.c_store_comment').attr('id'); 

        var new_comment = $.trim($(this).val()); 

        $.ajax({ 
        type:'post', 
        url:path to controller, 
        data:'comment='+new_comment+'&store_id='+store_id, 
        dataType:'json', 
        success:function(vals){ 
         $.each(vals,function(i,values){ 
          switch (i) { 
            case 'error': 
             alert('Sorry Something went Wrong'); 
            break; 

            case 'success': 
             var comment_div = '<div class="col1_comment2_row"><div class="col1_comment2_row_tilte">'+$('.user_name').html()+'</div>'; 
             comment_div += '<div class="col1_comment2_row_img"><a href="#nodo"><img class="delete_comment" id="'+values[1]+'" src="/images/delete_comment.png"></a> </div>'; 
             comment_div += '<div class="col1_comment2_row_cooment">'+values[0]+' </div></div>'; 


             $('.c_store_comment .scroll_container').append(comment_div); 
             $('#add_new_comment').val(''); 

            break; 
           }     
         }); 
        } 
        });   
       } 
      }); 
+0

Lustiger Tschad! Brauchen Sie nicht auch sein E-Mail-Passwort? :) – skafandri

+0

ist es, weil die Zeichenfolge "??" enthält im Datenattribut von AJAX? dh. data: 'comment =' + new_comment + '& store_id =' + store_id –

+0

soll dem '?' in der string hilfe in diesem fall ?? –

Antwort

3

Nach Ihre Kommentare, das Problem tritt nur auf, wenn Fragezeichen im Kommentartext vorhanden sind.

Diese Zeichen sind tatsächlich in URLs reserviert (sie markieren den Anfang der Abfragezeichenfolge). Darüber hinaus gibt jQuery keine Befehle zurück, da Sie eine Zeichenfolge in der data-Option an $.ajax() anstelle eines Objekts übergeben, sodass keine Verarbeitung ausgeführt wird.

Ich kann nicht erklären, warum was wie die jQuery Expando-Eigenschaft aussieht, auf dem Server veröffentlicht wird, obwohl ein kurzer Blick durch den Quellcode nichts offensichtliches ergab. Allerdings ist ein sicherer Weg, um das Problem zu umgehen wäre anstelle einer Zeichenfolge ein Objekt in der data Option weitergeben müssen:

$.ajax({ 
    type: "POST", 
    url: "path/to/controller", 
    data: { 
     comment: new_comment, 
     store_id: store_id 
    }, 
    dataType: "json", 
    success: function(vals) { 
     // ... 
    } 
}); 

Auf diese Weise werden jQuery automatisch die reservierten Zeichen in Ihre Daten entkommen, und Ihr Problem sollte Geh weg.

+0

danke .. werde es ausprobieren und lassen Sie es wissen .. –

+0

Offenbar war mein Beitrag dieser Antwort in Kommentaren nicht gut genug für ihn zu versuchen: P – Chad

-1
$('#add_new_comment').live('keyup',function (event) { 

     /*shft+enter for new line*/ 

    if (event.keyCode == 13 && event.shiftKey) { 
     $(event.currentTarget).val($(event.currentTarget).val()+"\n"); 

     return false; 
    }else if(event.keyCode == 13){ 
     /*code to be inserted in db*/ 
    } 
}); 
+1

'this' ist mit 'live()' korrekt an das Ereignisziel gebunden, es ist nicht nötig 'currentTarget' zu verwenden. Ich fürchte auch, dass Ihre Antwort nicht das Problem des Fragestellers angeht. –