【问题标题】:adding client events to telerik drop down list makes it static将客户端事件添加到 Telerik 下拉列表使其成为静态
【发布时间】:2012-10-30 16:23:48
【问题描述】:

我正在尝试将客户端事件添加到 Telerik 下拉列表中,但这样做会使其变为静态。静态我的意思是它不再像下拉列表一样,当我单击时它没有响应,因此无法查看/选择值。但是,只要我将下拉列表更改为组合框,它就可以正常工作。它让我可以单击并查看/选择值。

为什么会这样?为什么我可以将客户端事件添加到 Telerik 组合框,但不能添加到 Telerik 下拉列表?

这是我填充组合框的方式:

        <%= Html.Telerik().ComboBox().Name("ComboBox")
            .HtmlAttributes(new { @id = "ComboBox", @style = "width:104px;" })
            .ClientEvents(events =>
        {
            events.OnDataBinding("ComboBox_onDataBinding");
        })%>  

function ComboBox_onDataBinding(e) {
    var comboBox = $('#ComboBox').data('tComboBox');
                comboBox.dataBind([
                    { Text: "Product 1", Value: "1" },
                    { Text: "Product 2", Value: "2", Selected: true },
                    { Text: "Product 3", Value: "3" },
                    { Text: "Product 4", Value: "4" },
                    { Text: "Product 5", Value: "5" }
                ], true);
};

这是我填充下拉列表的方式:

        <%= Html.Telerik().DropDownList().Name("DropDownList")
            .HtmlAttributes(new { @id = "DropDownList", @style = "width:104px;" })
            .ClientEvents(events =>
        {
            events.OnDataBinding("DropDownList_onDataBinding");
        })%>  

function DropDownList_onDataBinding(e) {
    var dropDownList = $('#DropDownList').data('tDropDownList');
                dropDownList.dataBind([
                    { Text: "Product 1", Value: "1" },
                    { Text: "Product 2", Value: "2", Selected: true },
                    { Text: "Product 3", Value: "3" },
                    { Text: "Product 4", Value: "4" },
                    { Text: "Product 5", Value: "5" }
                ], true);
};

提前致谢。

【问题讨论】:

  • 会不会是你的组件倒退了?你有.DropDownList().Name("ComboBox").ComboBox().Name("DropDownList")
  • @ob。对不起,这是一个小姐类型。问题依然存在。

标签: javascript jquery html telerik telerik-mvc


【解决方案1】:

在您的情况下,当您不使用 Ajax 或 WebService 客户端数据绑定时,您不应配置 OnDataBinding 事件处理程序。您需要改为配置 OnLoad:

.ClientEvents(events => events.OnLoad("ddl_onLoad").OnChange("ddl_onChange")

处理程序:

function ddl_onLoad(e) {

    var ddl = $(this).data('tDropDownList');

    ddl.dataBind([
        { Text: 'Product 1', Value: '1' },
        { Text: 'Product 2', Value: '2', Selected: true },
        { Text: 'Product 3', Value: '3' },
        { Text: 'Product 4', Value: '4' }
    ], true);
}

function ddl_onChange(e) {

    //var ddl = $(this).data('tDropDownList');
    console.log(e.value);
}

【讨论】:

  • 不管我如何添加客户端事件,只要我将客户端事件添加到 Telerik ddl,它就会变成 statis(单击它时无法查看/选择值)。我试过你的方法,还是不行:/
  • 注意 - 一旦我将它更改为 Telerik 组合框,它就可以正常工作
  • 尝试从 DropDownList (.HtmlAttributes(new { @id = "DropDownList", ...) 中删除 "id" 属性的声明。这会将 id='DropDownList' 属性分配给不同的 html元素。
  • 就是这样! :) 最后感谢@Rustam
  • 你是怎么想的?
【解决方案2】:

您在OnDataBinding 处理程序中调用.dataBind(),这将再次触发OnDataBinding 事件,一次又一次...

考虑在OnLoad 事件或其他东西中进行客户端数据绑定

【讨论】:

  • 添加哪个事件并不重要。一旦我添加了一个客户端事件和一个用于该事件的 JS 函数,telerik 下拉列表就会变成静态的。我尝试了 OnLoad、OnChange、OnDataBinding、OnDataBound 所有这些
  • @user793468 你有没有机会拥有多个同名下拉菜单?
  • 不,我仔细检查过,甚至将其更改为不同的名称并尝试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
  • 2011-12-10
  • 2017-05-07
  • 1970-01-01
  • 2021-06-21
  • 2014-03-09
相关资源
最近更新 更多