【问题标题】:How do I prevent a click event based on drop down list selection?如何防止基于下拉列表选择的点击事件?
【发布时间】:2012-07-08 02:39:38
【问题描述】:

我在一个 ASP.NET 项目中有一个下拉列表,其中包含四个选项和一个默认状态。还有一个按钮可以打开弹出对话框。如果用户选择某些选项,我想禁用打开弹出窗口的按钮,因为 ddl 上的某些选项不需要弹出对话框。弹出窗口通过绑定到图像的 onClick 事件调用。如何阻止 onClick 事件触发四个 ddl 选项中的两个?这是代码的简化版本:

HTML 结构:

<select class="selClass" id="selID" name="selName"><option value="">- Select -</option>

<option value="Option1">Option1</option>

<option value="Option2">Option2</option>

<option value="Option3">Option3</option>

<option value="Option4">Option4</option>

</select>

JQUERY:

$(function () {
if ($("#ddlID option:selected").text() == "- Select -")
    $('img.popButton').button({ disabled: true })

else if ($("#ddlID option:selected").text() == "Option1")
    $('img.itemgridimg').button({ disabled: false });

else if ("#ddlID option:selected").text() == "Option2")
    $('img.itemgridimg').button({ disabled: true });

else if ("#ddlID option:selected").text() == "Option3")
    $('img.itemgridimg').button({ disabled: true });

else if ("#ddlID option:selected").text() == "Option4")
    $('img.itemgridimg').button({ disabled: false });
});

我希望这会完全禁用按钮的 onClick 事件,但它只会改变按钮的视觉状态(基于 ui-diabled 类),但弹出窗口仍处于激活状态。

正如我之前所说,弹出窗口是通过图像标签内动态生成的 onClick 事件调用的。当用户仅选择选项 2 或 3 时,如何阻止弹出事件触发?

更新:

根据下拉菜单中的某些选择来简单地隐藏按钮绝对是一种更好的方法,但是现在,我想在隐藏其他 div 的同时动态插入新图像。我认为这将是一个简单的等式,但我在某些地方犯了错误......我无法在旧 div 中插入图像,因为它是隐藏的,那么如何动态插入带有备用图像的新 div?我的更新代码如下,但由于该功能而出现错误……有什么建议吗?

$('img.itemgridimg').hide();

$("[id][name*='Status']:eq(0)").change(function () {
if ($("[id][name*='Status']:eq(0) option:selected").text() == "- Select -")
    $('img.itemgridimg').eq(0).hide();

$("<div/>",{
"html"  : "<img src='../Images/btnOff.png'>"
}); // <---- bad code…need help 

else if ($("[id][name*='Status']:eq(0) option:selected").text() == "Missing")
    $('img.itemgridimg').eq(0).show();

else if ($("[id][name*='Status']:eq(0) option:selected").text() == "Not Applicable")
    $('img.itemgridimg').eq(0).hide();

else if ($("[id][name*='Status']:eq(0) option:selected").text() == "Functional / Acceptable As Is")
    $('img.itemgridimg').eq(0).hide();

else if ($("[id][name*='Status']:eq(0) option:selected").text() == "Needs Repair/Replace/Cleaning")
    $('img.itemgridimg').eq(0).show();

});

【问题讨论】:

    标签: asp.net-mvc jquery-ui drop-down-menu


    【解决方案1】:

    为了防止按钮点击罚款尝试使用这个:

    $('img.popButton').on('click', function(){
    return false;
    });
    

    或者,您可以使用:

    $("img.popButton").click(function(event) {
      event.preventDefault();
    });
    

    【讨论】:

    • 是的,我已经尝试过这种方法,但点击事件仍在打开弹出窗口。我最好隐藏整个元素并将其替换为另一个没有 onclick 事件的图像。
    【解决方案2】:

    如果您真的无法控制&lt;img /&gt;onclick 处理程序,那么只要选择Option2Option3,我就会简单地隐藏图像。从可用性的角度来看,我发现用户对禁用的 UI 项目感到困惑,所以我通常最终隐藏了他们无论如何都无法交互的控件。

    您可以通过以下方式做到这一点。

    $('#selID').on('change', function() {
        var value = $(this).val();
        if (value == 'Option2' || value == 'Option3') {
            $('.popButton').hide();   
        } else {
            $('.popButton').show();
        }
    });​
    

    示例 - http://jsfiddle.net/eNEeC/

    【讨论】:

    • 感谢您的反馈。我尝试了一种类似于此的方法,但我不知道如何用另一个表示非活动状态的图像替换隐藏图像。有什么建议吗?
    • 如果用户无法点击,为什么还要显示非活动图像?无论如何,您可以在图形编辑器(例如 Photoshop)中更改现有图像,或者您可以做一些简单的事情,例如在 CSS 中应用一些不透明度,截取不透明图像,然后使用它。
    • 我有一个备用图像,但我的问题是这个项目在 ASP.NET-MVC 框架上,所以现在我必须为备用图像创建一个新类,并在同时隐藏原始图像。我必须编写一个函数来动态插入备用 div……有意义吗?
    【解决方案3】:

    此代码不起作用:

    $("<div/>",{
        "html"  : "<img src='../Images/btnOff.png'>"
    }); // <---- bad code…need help 
    

    如果这应该创建一个 div 并附加一个孩子 (img),那么方法应该是:

    $('<div/>').html("<img src='../Images/btnOff.png'>");
    

    上面的代码只会生成 div。您需要将其附加到它所属的页面。

    例子:

    var my_div = $('<div/>').html("<img src='../Images/btnOff.png'>");
    $('body').append(my_div);
    

    【讨论】:

    • 我尝试过类似的方法,但我在某处出现语法错误。如何将此代码插入到上面编辑的示例中?
    • 首先你需要得到想要的元素——var div = $('#my_div');那么你需要通过div.html("&lt;img src='../Images/btnOff.png'&gt;") 替换它的html。为了使此代码正常工作,您需要为 div 设置一个 ID 属性。
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多