Javascript 如何从Shining DT中的单选按钮(使用JS回调)访问用户输入,并在一个DT中使用不同的JS元素?

Javascript 如何从Shining DT中的单选按钮(使用JS回调)访问用户输入,并在一个DT中使用不同的JS元素?,javascript,jquery,r,shiny,datatables,Javascript,Jquery,R,Shiny,Datatables,我正在尝试将两个常见的共享JS回调组合到一个R datatable应用程序中(具有单选按钮(请参见和),并且在子/父表中具有嵌套行(请参见和许多其他地方)。它们各自都可以工作,但不能一起工作。我不确定我是否错误地绑定了JS,或者JS是否以某种方式相互矛盾?无论哪种方式,我都无法访问用户输入(如果我查看输入$xxx的结构,只会返回空值)。我已经包含了一个小示例(尽管仍然很长)来说明我的意思 库(闪亮) 图书馆(DT) 图书馆(shinyWidgets) 图书馆(tidyverse) shinyAp

我正在尝试将两个常见的共享JS回调组合到一个R datatable应用程序中(具有单选按钮(请参见和),并且在子/父表中具有嵌套行(请参见和许多其他地方)。它们各自都可以工作,但不能一起工作。我不确定我是否错误地绑定了JS,或者JS是否以某种方式相互矛盾?无论哪种方式,我都无法访问用户输入(如果我查看输入$xxx的结构,只会返回空值)。我已经包含了一个小示例(尽管仍然很长)来说明我的意思

库(闪亮)
图书馆(DT)
图书馆(shinyWidgets)
图书馆(tidyverse)
shinyApp(
ui=fluidPage(
标题='单选按钮和下拉菜单',
sliderInput(“n\u行\u表”,“行数:”,
最小值=0,最大值=10,
值=5),
行动BTTN(
inputId=“btnCancel”,
label=“制作表格”,
size=“sm”,
color=“警告”
),
p(“此示例不起作用!”),
DT::dataTableOutput(“datatable”),
逐字输出(“sel”),
p(“这个简单的例子确实有效!”),
DT::dataTableOutput(“datatable2”),
逐字输出(“sel2”),
p(“这些R6输入类对象,第一个选项卡中的对象不显示”),
逐字输出(“全部选择”),
),
服务器=功能(输入、输出、会话){
#理想情况下,不要使用计数器,
#这只会覆盖旧值,所以不是a_1,a_2,
#只要你点击按钮,它就会将输入$a设置回null
#直到用户再次点击。
#但在此期间,这是一项工作
计数器%
变异(
是=sprintf(“”,让我们来看看,是的),
否=sprintf(“”,让我们来看一看,否),
Maybe=sprintf(“”,让我们看看rowid,Maybe)
) %>%
嵌套(datalist=c(val_3,val_4))%>%
mutate(datalist=map(datalist,as.list))%>%
变异(datalist=map(datalist,list))
})
#----把桌子摆好
#----表格呈现ok。

output$datatable您在JavaScript回调中分配了错误的
id
元素,因为在您的表中,第一列实际上是
&oplus
列,但您需要第二列

因此,改变这种状况

table.rows().every(function(i, tab, row) {
   var $this = $(this.node());
   $this.attr('id', this.data()[0]); // this.data()[0] refers to the firts column, i.e. ⊕
   $this.addClass('shiny-input-radiogroup');
});
为此:

table.rows().every(function(i, tab, row) {
   var $this = $(this.node());
   $this.attr('id', this.data()[1]); // the id is in the second column in your case
   $this.addClass('shiny-input-radiogroup');
});


谢谢。在本例中,这确实解决了我在本例中的问题。但是,有没有办法使这种行为更可预测(例如,不按索引分配)?例如,如果我在表中添加两种不同类型的按钮,它仍然会断开(在新的例子中,一旦我点击remove,单选按钮就不起作用了。如果它解决了你的问题,请接受这些答案并发布一个新的问题。它确实解决了我狭义的问题,它对MWE有效,但不是如何向DT添加多种类型的JS代码并使它们一致工作的根本问题很好。