6

我为 jQuery 使用 ddSlick 插件,只有当我从创建的下拉列表中选择一个选项时,onSelected 方法才应该运行。

唯一的问题是,我的以下代码似乎在页面加载后立即运行 onSelected。

谁能指出我正确的方向?

$('#flag').ddslick({
    imagePosition:"left",
    background:"none",
    width:"66px",
    onSelected: function(data){
        var chosenCountry = data.selectedData.value;
        chosenCountry = chosenCountry.toLowerCase();
        if(data.selectedIndex > 0) {
            if( new_url[1] in oc(['de', 'es','fr','it']) ) {
                console.log("translated pages");
            }
        } else {
            console.log("English site");
        }
    }   
});

jsFiddle

谢谢

4

4 回答 4

12

经过数小时找出问题所在,我发明了一个解决方案。

我直接在代码上更改了一些东西。

注意:您需要使用未缩小版本来遵循此说明。


在线 220

寻找:

function selectIndex(obj, index) {

将其更改为:

function selectIndex(obj, index, a) {

270 号线

寻找:

if (typeof settings.onSelected == 'function') {
   settings.onSelected.call(this, pluginData);
}

将其更改为:

if (typeof settings.onSelected == 'function') {
    if (a !== true) settings.onSelected.call(this, pluginData);
}

最后在第 146 行

寻找

selectIndex(obj, index)

然后将其更改为

selectIndex(obj, index, true)

希望有帮助!

于 2012-11-07T10:20:26.283 回答
7

它又脏又笨,但它可以快速修复(使用缩小版本并且不想切换到我的一小段代码)。我刚刚定义了一个全局布尔值,并在第一次加载时将其设置为 true。

var _ddlLoaded = false;
$(function () {
    $('#ddl').ddslick({
            data: ddlData,
             onSelected: function (data) {
                if(_ddlLoaded  === false) {
                    _ddlLoaded = true;
                }
                else {
                    console.log(data.selectedData.value);
                }
    });
});
于 2014-09-30T04:09:56.970 回答
4

您可以随时查看ddSlick Remablized,它修复了这个问题并添加了许多其他很酷的功能,如键盘、类和禁用/启用支持!

或者你想这样做你自己去功能

function selectIndex(obj, index) {

比在函数的底部你会发现

//Callback function on selection
if (typeof settings.onSelected == 'function') {
        settings.onSelected.call(this, pluginData);
}

删除以下评论上方的剪切并粘贴该部分

//If set to display to full html, add html

而不是将 if 语句更改为

if (typeof settings.onSelected == 'function' && ddSelected.text().length > 0) {

ddSlick Remablized 甚至被 Prashant Chaudhary 本人发了推文!在这里查看https://twitter.com/chaudharyp/status/268045906442584064

于 2012-11-21T14:06:13.987 回答
0

你也可以试试这个jsFiddle

   function oc(a){
     var o = {};
     for(var i=0;i<a.length;i++){
       o[a[i]]='';
     }
     return o;
   }
   var temp = 0;
   $('#flag').ddslick({
     imagePosition:"left",
     background:"none",
     width:"66px",
     onSelected: function(data){
       var chosenCountry = data.selectedData.value;
       chosenCountry =    chosenCountry.toLowerCase();
       if(data.selectedIndex >= 0 && temp==1) {
          if( chosenCountry  in oc(['uk','de', 'es','fr','it']) ) {
             alert("translated pages");
          }
       } 
       temp = 1;
     }   
   });
于 2015-01-20T06:43:54.187 回答