将占位符文本添加到 plotly 小部件中的 selectize.js 下拉菜单

Add placeholder text to selectize.js dropdown menu in plotly widget

我正在使用 plotly 和 R 来创建交互式图表。它们每个都包含一个 selective.js 搜索小部件,它结合了一个 <input> 文本框和一个下拉菜单。 (有关示例,请参见 here。)我通过将 selectize = TRUE 传递给 plotly::highlight() 来巧妙地告诉添加搜索小部件。我想在 <input> 字段中包含占位符文本 - 这可能吗?

其他人询问如何在加载页面后change the selectize.js placeholder value。发布的解决方案通常要求在页面上添加一点 jquery,我很乐意这样做。但是我无法使解决方案起作用。出现问题的原因可能是我无法控制 selectize.js 或下拉菜单的任何其他方面如何合并到 HTML 文档中。 (将那部分绘制成黑盒。)

这是演示问题的最小 R 代码:

library(plotly)
data(mtcars)
myData <- highlight_key(mtcars, ~rownames(mtcars), group = "Enter name of car")
myFig <- plot_ly(myData, x = ~wt, y = ~mpg) 
myFig <- highlight(myFig, selectize = TRUE)
myFig

此代码创建一个带有 selective.js 下拉菜单的 HTML 页面。文本 "Enter name of car" 出现在 <input> 文本框上方。但我希望它显示在 in 框中——也就是说,作为占位符文本。这可能吗?

有可能:

library(plotly)
data(mtcars)
myData <- highlight_key(mtcars, ~rownames(mtcars))
myFig <- plot_ly(myData, x = ~wt, y = ~mpg) 
myFig <- highlight(myFig, selectize = TRUE)
onRender(
  myFig,
  "function (el) {

    // Get selectized search widget
    s = $('select')[0].selectize;

    // Update placeholder 
    s.settings.placeholder = 'Enter name of car'; 
    s.updatePlaceholder();

    // Hide group name (random string) that would appear above placeholder
    $('#htmlwidget_container').find('label').css('display', 'none');
  }")