2009-08-05 7 views
1

J'essaie de nettoyer manuellement le code HTML d'un Telerik RadEditor avec JavaScript, mais je n'arrive pas à trouver l'emplacement correct pour stocker la valeur afin qu'elle soit enregistrée sur poster.Modification de la valeur d'un Telerik RadEditor avec Javascript/jQuery

Voici les JS je:

$(function() {  
    jQuery.fixHash = function ($html) {  

     // modify $html 

     return $html; 
    }; 

    $("#adminEditingArea input[id$='SaveButton']").unbind("click").click(function() { 
     $("iframe[id$='_contentIframe']").trigger("save"); 

     // call .net postback 

     return false; 
    }); 

}); 

var editorSaveEventInit = false; 
function InitSaveEvent() { 
    if (!editorSaveEventInit) { 
     var $EditFrames = $("iframe[id$='_contentIframe']"); 
     if ($EditFrames && $EditFrames.length > 0) { 
      $EditFrames.bind("save", function (e) { 
       var $thisFrame = $(this); 
       var thisFrameContents = $thisFrame.contents(); 
       if (thisFrameContents) { 
        var telerikContentIFrame = thisFrameContents.get(0); 
        var $body = $("body", telerikContentIFrame); 
        var html = $.fixHash($body).html(); 
        $body.html(html); 

        // also tried storing the modified HTML in the textarea, but it doesn't seem to save: 
        //$thisFrame.prev("textarea").html(encodeURIComponent("<body>" + html + "</body>")); 
       } 
      }); 
      editorSaveEventInit = true; 
     } 
    } 
}; 

$(window).load(function() { 
    InitSaveEvent(); 
}); 

Est-il possible d'accéder à l'objet RadEditor Telerik avec JavaScript (en utilisant OnClientCommandExecuted()?) Pour que je puisse accéder aux fonctions .get_html() et .set_html(value)? Si non, quelles valeurs dois-je définir avant de poster?

Répondre

4

Pourquoi ne pas utiliser custom content filters.

+0

Génial, je n'avais aucune idée que c'était même possible. Je pense qu'il est peut-être un peu tard pour refactoriser ma solution actuelle, mais cela sera certainement utile à l'avenir, merci! – travis

0

Ah, vient de découvrir la fonction de Telerik $find() intégré: http://www.telerik.com/help/aspnet-ajax/editor_getingreferencetoradeditor.html

Edit: voici la solution que je suis venu avec ma InitSaveEvent() fonction:

var editorSaveEventInit = false; 
function InitSaveEvent() { 
    if (!editorSaveEventInit) { 
     var $EditFrames = $("iframe[id$='_contentIframe']"); 
     if ($EditFrames && $EditFrames.length > 0) { 
      $EditFrames.bind("save", function (e) { 
       var $thisFrame = $(this); 
       var thisFrameContents = $thisFrame.contents(); 
       if (thisFrameContents) { 
        var telerikContentIFrame = thisFrameContents.get(0); 
        var $body = $("body", telerikContentIFrame); 
        var html = $.fixHash($body).html(); 
        // SOLUTION! 
        var $radeditor = $thisFrame.parents("div.RadEditor.Telerik:eq(0)"); 
        var editor = $find($radeditor.attr("id")); 
        editor.set_html(html); 
        // ☺ 
       } 
      }); 
      editorSaveEventInit = true; 
     } 
    } 
};