【问题标题】:Responsive filemanager callback function响应式文件管理器回调函数
【发布时间】:2014-10-23 14:07:23
【问题描述】:

我使用独立版本的 Responsive Filemanager 9 在 #image_link 上进行图像选择。

应在何处以及如何使用 responsive_filemanager_callback 函数?

我正在尝试按照RFM documentation 和以下代码中的说明使其工作。 这是在 RFM9 中选择图像后更新 #image_preview 的 src 属性所需要的。

这是我的代码:

<input id="image_link" name="link" type="text" value="">
<a class="btn iframe-btn" type="button" href="<?=FILEMANAGER_PATH;?>/dialog.php?type=1&field_id=image_link">Select</a>
<img id="image_preview" src="" />;

<script>
$('.iframe-btn').fancybox({ 
    'width'     : 900,
    'height'    : 600,
    'type'      : 'iframe',
    'autoScale' : false
});

$('#image_link').on('change',function(){
  alert('change triggered');
});

function responsive_filemanager_callback(field_id){ 
    console.log(field_id);
    var url=jQuery('#'+field_id).val();
    alert('update '+field_id+" with "+url); 
    //your code
} 
</script>

$('#image_link')on.('change') 函数无法识别 RFM 所做的更改。

感谢您的意见!

【问题讨论】:

    标签: javascript callback responsive-filemanager


    【解决方案1】:

    创建链接:

    <a href='Address_Of_dialog.php?type=0&field_id=name'>open_fancybox</a>
    

    注意 href 属性中的最后一部分,field_id 参数,即 输入字段的ID

    <input id='name'>
    

    现在如果你点击打开fancybox的链接,你应该编写这段代码来打开fancybox:

    $('a').fancybox({
            type: 'iframe',
            minHeight: '600'
        });
    

    然后,如果您单击响应式文件管理器中的任何图像,该图像的 url 将打印在输入字段中,并且fancybox 将自动关闭。

    因此,您不需要任何功能即可从响应式文件管理器中获取信息,但如果您想在此之后执行任何操作(例如预览选定的图片),您可以添加功能:

    function responsive_filemanager_callback(field_id){ 
       //write whatever you want
       //you can change the src of an <img> using the <input> value
    }
    

    这个功能会在图片被选中并且fancybox关闭的时候触发,所以非常好用。

    如果您想要一个干净的文件地址,可以将 relative_url=1 添加到 href 地址,如下所示:

    <a href='Address_Of_dialog.php?type=0&field_id=name&relative_url=1'>open_fancybox</a>
    

    【讨论】:

      【解决方案2】:

      我的解决方案是修改 filemanager/js directory.. (or include.min.js. 中的 include.js 文件,它在 dialog.php 246 行中定义)

      因此,在第 500 行的 include.js 文件中,您可以找到 function apply_img(file,external)

      在函数末尾添加以下行:

       if (typeof **parent.**responsive_filemanager_callback == 'function')
          { parent.responsive_filemanager_callback(external);  } 
      
          }
      

      “父母”。是最重要的。我想,因为 iFrame 需要它。所以如果你在你的 html 文档中添加一个 .responsive_filemanager_callback 函数,它会运行它。

      【讨论】:

        【解决方案3】:

        在跨域示例的演示中使用了更改事件,因此您可以删除。 您必须编辑 responsive_filemanager_callback 函数。 剩下的代码就ok了,看我的自定义例子here

        【讨论】:

        • 抱歉,回调没有触发。我单独设置了here。你看到有什么问题吗?谢谢!
        【解决方案4】:

        我现在找到了另一种通过 javascript 检测输入更改的解决方案。

        按间隔检查可能不是很漂亮,但简单,足够快且可靠。 感谢@kikito!

        https://github.com/splendeo/jquery.observe_field

        <input id="image_link" name="link" type="text" value="">
        <a class="btn iframe-btn" type="button" href="<?=FILEMANAGER_PATH;?>/dialog.php?type=1&field_id=image_link">Select</a>
        <img id="image_preview" src="" style="display:none;" />;
        
        <script type="text/javascript" src="/jquery.observe_field.js"></script>
        <script>
        $('.iframe-btn').fancybox({ 
            'width'     : 900,
            'height'    : 600,
            'type'      : 'iframe',
            'autoScale' : false
        });
        
        $(function() {
            // Executes a callback detecting changes with a frequency of 1 second
            $("#image_link").observe_field(1, function( ) {
                // alert('Change observed! new value: ' + this.value );
                $('#image_preview').attr('src',this.value).show();
        
            });
        });
        </script>       
        

        【讨论】:

          【解决方案5】:

          设法解决了问题。按照代码:

          HTML:

               <input id="image_link" name="link" type="text" value="">
                  <a class="btn iframe-btn" type="button" href="<?=$filemanager_path;?>/dialog.php?type=1&field_id=image_link">Select</a>
                  <div id="cont-img"><img id="image_preview" src="" style="display:none;" width="303" /></div>
          

          JAVAscript:

                  <script>
                  function responsive_filemanager_callback(field_id){ 
                      console.log(field_id);
                      var url=jQuery('#'+field_id).val();
                      //alert('update '+field_id+" with "+url); 
                      //your code
                      $('#image_preview').attr('src',document.getElementById("image_link").value).show();
                      parent.$.fancybox.close();
                  } 
                  </script>
          

          我用 fanybox 来打开和关闭弹窗

          【讨论】:

          • 谢谢。将参数 field_id 传递给 dialog.php 解决了我的问题。这是最好的答案。
          猜你喜欢
          • 2020-03-09
          • 1970-01-01
          • 2018-10-07
          • 2017-11-12
          • 2020-08-19
          • 2018-02-21
          • 2017-08-15
          • 2015-01-24
          • 2017-04-16
          相关资源
          最近更新 更多