2012-07-07 141 views
3

我的网站(MVC3 + JQuery)和它的移动版本(MVC3 + JQuery移动版)之间有一个非常奇怪的行为,它们被分成两个截然不同的解决方案。MVC3 DropDownList + JSON +选择问题

我正在使用下面的代码根据另一个(SearchBy)更改下拉(SearchValue)的集中。

剃刀:

@Html.DropDownListFor(x => x.SelectedSearch, new SelectList(Model.SearchBy, "key", "value"), new { onchange = "GetValues($(this).val());" }) 
@Html.DropDownListFor(m => m.SelectedSearchValue, new SelectList(Model.SearchValue, "key", "value")) 

JSON:

$.ajax({ 
        type: "POST", 
        url: '@Url.Action("GetValues", "Search")', 
        data: "{searchId:" + searchId + "}", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        success: function (data) { 
         var options = $('#SelectedSearchValue'); 
         $('option', options).remove(); // Remove previous 

         $.each(data, function() { 
          options.append($('<option/>').val(this.Id).text(this.Display)); 
         }); 
        } 
       }); 

此代码工作在我的网站(JQuery的)完全没有问题,但它不是我的移动网站的情况下(jQuery Mobile的),在其中正在为Opera Mobile工作,但不是FF或IE或Safari ...(我尝试用用户代理来模拟移动设备)

正确设置SearchValue下拉列表的值,但在JSON调用结束时,选定的值是之前选定的值(不在下拉列表的可能值中)。我不知道是明确的,所以我给你一个小例子:

我有以下几种可能的搜索项: - 名称 - 汽车

当我选择的名字,我想在SearchValue东西展示比如“Name1”,“Name2”等等 当我选择Car时,我想在SearchValue中显示类似“Car1”,“Car2”等的内容等。

但是用我的手机网站,当我将“名称”值更改为“汽车”时,下拉列表会正确填充正确的值(“Car1”,“Car2”等),但选定的值是前一个值例如“Name1”),即使它不在下拉列表的可能值中。我也尝试手动选择第一个值,但没有任何反应:

$('option[value=' + myBeautifulValue + ']').attr('selected', 'selected'); 

您有解决我的问题的想法吗?我做错了什么?

预先感谢您的帮助, 尼科

PS:对不起,我的英文不好

回答

1

尝试使用jQuery的prop

$('option[value=' + myBeautifulValue + ']').prop('selected', true); 

jQuery upgrade blog notes - 设定时, selected属性的元素使用.prop来获取/设置值。

+0

遗憾的是它不工作。但我现在会使用'道具',因为它是首选的使用方式:) Thiks for your idea! – nFournier 2012-07-07 01:36:41

+1

好的,我在这里找到了解决方案。我必须刷新下拉列表,更加奇怪! 像这样: var myselect = $(“#SelectedSearchValue”); myselect [0] .selectedIndex = 0; myselect.selectmenu('refresh'); [http://www.andymatthews.net/read/2011/12/14/Refreshing-jQuery-Mobile-listviews,-buttons,-se-dropdowns,-and-input-fields][1] [1]:http://www.andymatthews.net/read/2011/12/14/Refreshing-jQuery-Mobile-listviews,-buttons,-select-dropdowns,-and-input-fields – nFournier 2012-07-07 02:09:34

+0

@nFournier这是新的对我来说,你应该回答你自己的问题,因为它可能会帮助别人有同样的问题... – xandercoded 2012-07-07 04:14:10

3

好吧,我找到了解决方案。我必须刷新下拉列表,更加奇怪! 就像是:

var myselect = $("#SelectedSearchValue"); 
myselect[0].selectedIndex = 0; 
myselect.selectmenu('refresh'); 

Source