d单击选择选项赢得';所选选项的st post值-jquery插件

d单击选择选项赢得';所选选项的st post值-jquery插件,jquery,jquery-ui,jquery-plugins,Jquery,Jquery Ui,Jquery Plugins,我正在使用ddslick制作带有图标的下拉菜单,唯一的问题是当我发布表单时,所选选项的值总是空的,如果我关闭ddslick,它可以正常工作 <script language="javascript" type="text/javascript"> $('.cflagdd').ddslick({ onSelected: function(selectedData){ //callback function: do something with selectedData;

我正在使用ddslick制作带有图标的下拉菜单,唯一的问题是当我发布表单时,所选选项的值总是空的,如果我关闭ddslick,它可以正常工作

<script language="javascript" type="text/javascript">
$('.cflagdd').ddslick({
 onSelected: function(selectedData){
    //callback function: do something with selectedData;
   // $('#editcflag').submit(); - this does not work, posts form on page load
}   
});
</script>

<select class="cflagdd" name="cflag">
<option value="0" selected="selected">No action flag set</option>
<option value="1" data-imagesrc="'.base_url().'images/Actions-flag-green-icon.png">Resolved</option>
<option value="2" data-imagesrc="'.base_url().'images/Actions-flag-yellow-icon.png">Investigate</option>
<option value="3" data-imagesrc="'.base_url().'images/Actions-flag-red-icon.png">Urgent</option>
<option value="4" data-imagesrc="'.base_url().'images/Actions-flag-blue-icon.png">False positive</option>
</select>

$('.cflagd').ddslick({
onSelected:功能(selectedData){
//回调函数:对所选数据进行处理;
//$('#editcflag').submit();-这不起作用,在页面加载时发布表单
}   
});
未设置操作标志
断然的
调查
紧急的
假阳性
版本: Jquery-1.7.2.js jqueryui-v1.8.20


感谢您的帮助,很有可能是一个比这个更好的解决方案,但是当我遇到这个问题时,我做的是将我选择的值放入一个隐藏的输入元素中

<script language="javascript" type="text/javascript"> 
    $('.cflagdd').ddslick({  
        onSelected: function(selectedData){  
            if(data.selectedIndex > 0) {
                $('#hidCflag').val(data.selectedData.value);

                $('#editcflag').submit();
            }   
        }    
    }); 
</script>  

<input type="hidden" name="hidCflag" id="hidCflag" value="" />

<select class="cflagdd" name="cflag"> 
    <option value="0" selected="selected">No action flag set</option> 
    <option value="1" data-imagesrc="'.base_url().'images/Actions-flag-green-icon.png">Resolved</option> 
    <option value="2" data-imagesrc="'.base_url().'images/Actions-flag-yellow-icon.png">Investigate</option> 
    <option value="3" data-imagesrc="'.base_url().'images/Actions-flag-red-icon.png">Urgent</option> 
    <option value="4" data-imagesrc="'.base_url().'images/Actions-flag-blue-icon.png">False positive</option> 
</select> 

$('.cflagd').ddslick({
onSelected:函数(selectedData){
如果(data.selectedIndex>0){
$('hidCflag').val(data.selectedData.value);
$('#editcflag')。提交();
}   
}    
}); 
未设置操作标志
断然的
调查
紧急的
假阳性

ddslick插件更改所有选择标记,并为它们创建一个新的隐藏
-字段。查看您的代码,您可能会发现一个未定义的输入:

<input name="undefined" id="undefined" class="dd-selected-value" type="hidden" value="1">

您可以将所选的ddslick数据放入类似input.hidden的字段中。然后,ddslick将输入元素呈现为HTML。当您执行简单表单提交时,html元素无法发送数据。;)

Snipe656的概念构想可行,但脚本有一个错误。正确的脚本部分应为:

<script language="javascript" type="text/javascript"> 
    $('.cflagdd').ddslick({  
        onSelected: function(data){  
            if(data.selectedIndex > 0) {
                $('#hidCflag').val(data.selectedData.value);

                $('#editcflag').submit();
            }   
        }    
    }); 
</script>

$('.cflagd').ddslick({
onSelected:函数(数据){
如果(data.selectedIndex>0){
$('hidCflag').val(data.selectedData.value);
$('#editcflag')。提交();
}   
}    
}); 
(…)

@johnj

我和你有同样的问题。所有这些提示/提示都没有帮助

ddslick的问题在于它的四轮马车。没有与所选项目一起发送的名称,但此

应该是

试试这个继任者:


您的错误在此版本中已修复。所选项目将被正确发送到服务器。

您可以试试这个,它对我有用

$('.cflagdd').ddslick({
 onSelected: function(selectedData){
    $('.dd-selected-value').prop ('name', 'cflag');
}   
});

ddslick中有一个bug,它使隐藏的输入没有name属性

我能够向ddslick添加几行代码,让它将select的name属性添加到它创建的隐藏元素中

首先,下载ddslick的未压缩版本:

然后在第106行或以“var ddSelect=…”开头的行之后添加以下内容:


以下是解决此问题的方法:

在未统一的源代码中找到这一行(第103行附近)

并在其下方添加以下内容:

// Inherit name attribute from original element
obj.find("input.dd-selected-value").attr("name", $(original).attr("name"))
这为我解决了这个问题

解决方案
Solution
<select id="status" name="status" class="ddslick" >
        <option  value="1">Admin Only</option>
        <option  value="2">Editing</option>
        <option value="3">Review</option>
        <option  value="4">Live</option>
</select>

<script>
$("select.ddslick").each(function(){
        var name =  $(this).attr('name');
        var id = $(this).attr('id');
        $("#"+id).ddslick({
            showSelectedHTML: false,
            onSelected: function(selectedData){
                $("#"+id+ " .dd-selected-value").prop ('name', name);
             }  
        });
    });
</script>
仅限管理员 编辑 复习 居住 $(“select.ddslick”)。每个(函数(){ var name=$(this.attr('name'); var id=$(this.attr('id'); $(“#”+id).dds单击({ showSelectedHTML:false, onSelected:功能(selectedData){ $(“#”+id+“.dd选定值”).prop('name',name); } }); });
通过在存储所选选项值的隐藏输入中动态添加一个名称,解决了此问题

在HTML中:

<select id='locationList'> 
  <option value="a">a</option>
  ...
</select>
  • 动态地将name属性添加到hidden

    $('#locationList').find('input[type=hidden]:first').attr("name", "location");
    

  • 在jquery.ddslick.min.js中找到此文本 并为其添加一个名称

    <input class="dd-selected-value" type="hidden" />
    
    
    
    这将向服务器发送正确的数据

    <input class="dd-selected-value" name="cflag" type="hidden" />
    

    下载稳定版


    我已经尝试了几乎所有给出的答案。有些不适用于多个实例,而另一些则断开了指向固定脚本的链接。我发现这是ddSlick的最新版本,它实际上修复了这个“bug”。

    请改进答案的格式,使其更具可读性。另请参见@Spontifixus,欢迎您自己编辑这些答案。不仅你会提高质量。你甚至会获得一些额外的声誉。@KonradViltersten JavaScript不是我的核心专业领域,所以我不确定什么是格式化为代码的,什么只是强调。此外,仅更改格式的编辑往往会因为太小而被拒绝。通常我自己编辑,但在这种情况下,我认为问题的作者(或在该主题上具有更多专业知识的人)可以做得比我更好。@spontifix我不同意“更改太小”的论点。变化的大小及其意义是两件不同的事情。不过,我明白你的意思。我编辑了一点这篇文章(也不是JS的超级高手)。我按照你说的做了,我的输入从来没有名字+id,只有class=“dd selected value”,我必须创建一个额外的hiddenfield,以便在表单提交时将所选值发送到Web服务器。你的原始标记有id吗?
    Solution
    <select id="status" name="status" class="ddslick" >
            <option  value="1">Admin Only</option>
            <option  value="2">Editing</option>
            <option value="3">Review</option>
            <option  value="4">Live</option>
    </select>
    
    <script>
    $("select.ddslick").each(function(){
            var name =  $(this).attr('name');
            var id = $(this).attr('id');
            $("#"+id).ddslick({
                showSelectedHTML: false,
                onSelected: function(selectedData){
                    $("#"+id+ " .dd-selected-value").prop ('name', name);
                 }  
            });
        });
    </script>
    
    <select id='locationList'> 
      <option value="a">a</option>
      ...
    </select>
    
    $('#locationList').ddslick();
    
    $('#locationList').find('input[type=hidden]:first').attr("name", "location");
    
    <input class="dd-selected-value" type="hidden" />
    
    <input class="dd-selected-value" name="cflag" type="hidden" />