Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:使回调返回另一个回调的输出_Javascript_Jquery_Callback_Magicsuggest - Fatal编程技术网

Javascript JS:使回调返回另一个回调的输出

Javascript JS:使回调返回另一个回调的输出,javascript,jquery,callback,magicsuggest,Javascript,Jquery,Callback,Magicsuggest,我正在使用Javascript 此插件有一个回调selectionRenderer,允许您在插入选择之前更改其html 我想做的是,根据用户输入更改选择html 因此,按照我的设置方式,selectionRenderer回调打开一个引导模式,其中包含一个表单。然后,当表单提交时,将创建另一个submit回调 我不知道如何将submit回调中收集的数据传递到selectionRenderer回调中 $(function() { var modal = $('#exampleModal');

我正在使用Javascript

此插件有一个回调
selectionRenderer
,允许您在插入选择之前更改其html

我想做的是,根据用户输入更改选择html

因此,按照我的设置方式,
selectionRenderer
回调打开一个引导模式,其中包含一个表单。然后,当表单提交时,将创建另一个
submit
回调

我不知道如何将
submit
回调中收集的数据传递到
selectionRenderer
回调中

$(function() {

  var modal = $('#exampleModal');

  $('#magicsuggest').magicSuggest({
    selectionRenderer: function(data){
      modal.modal('show');

      var color = 'red';
      modal.find('#color-form').submit(function(e) {
        e.preventDefault();

        color = $(this).find('#color-input').val();
        console.log(color);

        modal.modal('hide');
      });

      return '<span style="color: '+color+';">' + data.name + '</span>';
    },
    allowFreeEntries: false,
    data: data
  });

});
$(函数(){
var modal=$('exampleModal');
$(“#magicsuggest”)。magicsuggest({
selectionRenderer:函数(数据){
modal.modal('show');
变量颜色='红色';
modal.find(“#color form”).submit(函数(e){
e、 预防默认值();
color=$(this.find('#color input').val();
控制台。日志(颜色);
modal.modal('hide');
});
返回“”+data.name+“”;
},
allowFreeEntries:false,
数据:数据
});
});

如您所见,本例中的
颜色
submit
回调中收集,但由于该回调是异步触发的,因此无法将该数据传递给
selectionRenderer
回调,因为该函数已返回


在一个完美的世界中,我显然可以让代码停止并等待回调继续,但由于它是一个插件,我不想分叉并破坏它

将打开模式的事件更改为选择事件,并在提交处理程序中查找最后一个标记以更改其颜色

 var ms = $('#magicsuggest').magicSuggest({
    selectionRenderer: function(data) { 
      return '<span class="my-tags">' + data.name + '</span>';
    },
    allowFreeEntries: false,
    data: data
  })

  $(ms).on('selectionchange', function(e, m) {
    modal.modal('show');
  });;

  $('#color-form').submit(function(e) {
    e.preventDefault();
    var color = $('#color-input').val();
    $('.my-tags:last').css('color', color);   
    modal.modal('hide');
  });
var ms=$(“#magicsuggest”).magicsuggest({
selectionRenderer:函数(数据){
返回“”+data.name+“”;
},
allowFreeEntries:false,
数据:数据
})
$(毫秒)。on('selectionchange',函数(e,m){
modal.modal('show');
});;
$(“#颜色表”)。提交(函数(e){
e、 预防默认值();
var color=$('#color input').val();
$('.my-tags:last').css('color',color);
modal.modal('hide');
});

那是。。。不可能。也没有什么意义。您希望在表单提交后,从定义提交事件的函数返回输入值?“在完美的世界中,我显然可以让代码停止并等待回调继续”erm。嗯,我的意思是,不,你不能在javascript阶段真正做到这一点。你为什么不在模式回调中设置跨度的颜色呢?@KevinB使用yield关键字使用ES6是可能的。我只是想换一种方式,因为它还没有得到很好的支持。@Nikita240呃,不,那不是一回事。您可以在生成器或异步函数中暂停逻辑,但这不会使代码正常工作,您仍然需要使用javascript的异步特性。